Розробка тендерного майданчика
Проведення конкурентних закупівель — складне завдання, особливо для держзамовлення або великих B2B-контрактів. Замовники стикаються з вимогами до безпеки (sealed bids), прозорості (аудит) та юридичної значущості (ЕЦП). Витік цін до дедлайну підриває довіру учасників та знижує конкуренцію. Наша команда з 10+ річним досвідом створює тендерні майданчики під ключ, що відповідають стандартам 44-ФЗ та 223-ФЗ. Використовуємо сучасний стек: React, Node.js, PostgreSQL, автоматизуємо CI/CD через GitLab.
Реальний кейс: великий B2B-холдинг скаржився на низьку активність постачальників через побоювання розкриття цін. Розгорнули платформу на AWS EKS з модулем sealed bids на Go, використовуючи AWS KMS для управління ключами. Результат: кількість учасників зросла втричі. Автоматична оцінка заявок за ваговими критеріями скоротила час обробки з п'яти днів до двох секунд. Платформа підтримує відкриті та закриті конкурси, запит котирувань та електронні аукціони.
Для держзакупівель за 44-ФЗ обов'язкова інтеграція з Прозорро. Наша платформа автоматично дублює опубліковані закупівлі, виключаючи помилки ручного введення. Всі документи підписуються кваліфікованим електронним підписом, audit log фіксує кожну дію. Сповіщення про статуси закупівель — через email та Telegram.
Що таке тендерний майданчик?
Тендерний майданчик — електронна система, де замовник публікує вимоги, постачальники подають заявки, а переможець визначається автоматично або комісією. На відміну від маркетплейсу, критична безпека даних (шифрування цін) та невідворотність логування кожної дії.
Які типи процедур підтримуються?
| Процедура |
Опис |
Середня тривалість |
| Відкритий конкурс |
Всі постачальники подають заявки відкрито |
20-30 днів |
| Закритий конкурс |
Тільки запрошені учасники |
15-20 днів |
| Запит котирувань |
Одноетапна процедура з ціновими пропозиціями |
7-10 днів |
| Електронний аукціон |
Постачальники знижують ціну в реальному часі |
1-2 дні |
| Двоетапний конкурс |
Спочатку технічні пропозиції, потім цінові |
25-40 днів |
Кожна процедура налаштовується під бізнес-правила замовника: ваги критеріїв, автоматичне відкриття пропозицій, сповіщення.
Життєвий цикл тендера
Draft -> Published -> Accepting bids (deadline) -> Evaluation -> Award -> Contract -> Execution -> Closed
Кожен перехід фіксується в audit log з timestamp та користувачем. Зміна статусу після дедлайну неможлива.
Як працюють запечатані пропозиції (sealed bids)?
Цінові пропозиції шифруються під час подачі та розшифровуються після дедлайну. Використовуємо симетричне шифрування з окремим ключем для кожної заявки:
from cryptography.fernet import Fernet
# При подачі заявки
key = Fernet.generate_key() # ключ зберігається зашифрованим
f = Fernet(key)
encrypted_price = f.encrypt(str(price).encode())
# Зберігаємо encrypted_price, ключ розкривається після дедлайну
# Після дедлайну - автоматичне розкриття
decrypted_price = f.decrypt(encrypted_price)
Альтернатива: envelope encryption через AWS KMS або HashiCorp Vault — ключ розкриття активується за розкладом. У 100% випадків sealed bids виключають витік цін.
Оцінка заявок: автоматична vs ручна
| Тип оцінки |
Швидкість |
Прозорість |
Ризик помилки |
| Автоматична (лише ціна) |
Миттєво |
Повна |
Низький |
| Вагова (ціна + тех. бали) |
1-2 секунди |
Висока |
Середній |
| Ручна (комісія) |
3-5 днів |
Залежить від членів комісії |
Високий |
Автоматична оцінка в 10 разів швидша за ручну. Комбінуємо підходи: для простих закупівель — авто, для складних — ручна з верифікацією.
Чому важлива інтеграція з Прозорро?
Для держзакупівель за 44-ФЗ та 223-ФЗ інтеграція з Прозорро обов'язкова. Наша платформа автоматично публікує оголошення та результати, синхронізує статуси. Це економить до 10 годин на тиждень на ручному введенні та виключає штрафи за несвоєчасне розміщення.
Електронний підпис та оскарження
Документи (договір, протокол, заявки) підписуються ЕЦП: КриптоПро для російських майданчиків, кваліфікований ЕП для юридично значущих закупівель, інтеграція з Дія для верифікації. Постачальник, який не переміг, може подати скаргу. Процес: опис порушення -> розгляд -> рішення (відхилити/визнати порушення/переглянути). Скарга призупиняє підписання договору (44-ФЗ).
Як ми розробляємо тендерний майданчик: покроково
- Аналітика та проектування — збираємо вимоги, малюємо ER-діаграми, специфікацію API.
- Розробка модуля публікації та подачі заявок — фронтенд на React, бекенд на Laravel або Node.js.
- Реалізація sealed bids — обираємо метод шифрування (envelope encryption, KMS), пишемо модуль, інтегруємо зі сховищем ключів.
- Інтеграція ЕЦП та Прозорро — підключаємо КриптоПро, налаштовуємо обмін з Прозорро через REST API.
- Тестування — unit, integration, e2e тести, навантажувальне тестування.
- Деплой та моніторинг — Docker, Nginx, CI/CD, логування.
- Навчання та документація — інструкції для адміністраторів та користувачів, API-документація.
Що ви отримуєте в результаті
| Документація та доступи |
Навчання та підтримка |
| Повна технічна документація, API-специфікація |
Навчання адміністраторів та користувачів |
| Доступ до вихідного коду та репозиторію |
Технічна підтримка на етапі запуску |
| Сертифікати та ліцензії на ПЗ |
Гарантійне обслуговування 12 місяців |
Типові помилки при створенні тендерного майданчика
- Ігнорування вимог 44-ФЗ до audit log та електронного підпису — невідповідність.
- Використання саморобної криптографії для sealed bids — краще перевірені бібліотеки (cryptography, AWS KMS).
- Відсутність сповіщень — постачальники пропускають дедлайни.
- Неправильне налаштування ваг критеріїв — автоматична оцінка видає невірні результати.
Терміни та вартість
| Етап |
Тривалість |
| MVP (публікація, подача, базова оцінка, audit log) |
3-4 місяці |
| Повноцінний майданчик (sealed bids, ЕЦП, кілька процедур, Прозорро) |
6-10 місяців |
Вартість розраховується індивідуально залежно від складності та стеку. Приклад: для B2B-холдингу платформа окупилася за 8 місяців, скоротивши цикл закупівель на 40%.
Зв'яжіться з нами для консультації з архітектури. Замовте розробку MVP для швидкого старту торгів.
Розробка корпоративних порталів та внутрішніх систем
Ми займаємося розробкою корпоративних порталів — CRM, ERP, LMS та Intranet. Кожен такий проект починається не з верстки лендінгу, а з того, як бізнес-правила ляжуть в архітектуру: хто бачить які дані, як синхронізуються 1С та облікова система, як 500 контактів перетворюються на 500 000 без падіння продуктивності. За 7 років ми реалізували понад 40 порталів для компаній з чисельністю від 50 до 5000 співробітників. Оцінимо ваш проект за два робочі дні — просто зв'яжіться з нами.
Як ми забезпечуємо якість архітектури?
Публічний сайт можна запустити без детального проектування — ітеративно виправляти за фідбеком. З корпоративним порталом так не працює: вартість виправлення архітектурних рішень після запуску на 200 користувачів неспівставно вища. Тому ми приділяємо 70% часу аналітиці та прототипуванню, а код пишемо тільки після узгодження рольової матриці та інтеграційної схеми.
Три зони, де найчастіше приймаються погані рішення, — модель прав доступу, продуктивність на великих даних та real-time оновлення.
Як побудувати рольову модель для 30 відділів?
Модель прав доступу. «Менеджер бачить тільки своїх клієнтів, керівник відділу — весь відділ, директор — всю компанію, але фінансові дані — тільки фінансовий директор і вище». Це не три ролі — це матриця з ролей, дозволів, організаційних одиниць та володіння записами. Якщо це реалізувати через if ($user->role === 'manager') в контролерах — через півроку код стане непідтримуваним.
Правильний підхід: Spatie Laravel Permission для базової рольової моделі + Policy класи для object-level permission (can('view', $deal) перевіряє не тільки роль, але й володіння). Для складних ієрархічних структур — ABAC (Attribute-Based Access Control) замість RBAC.
Продуктивність на великих даних. CRM з 500 000 контактів, фільтрація по 10 полях, сортування за активністю — це задача, де наївна реалізація видає 15-секундні запити. Composite indexes, денормалізація агрегатів (last_activity_at на самому записі замість MAX по зв'язаній таблиці), Elasticsearch для full-text пошуку по контактах.
Real-time оновлення. Декілька співробітників працюють з одним документом або задачею. Без WebSocket — постійні setInterval з polling кожні 5 секунд, зайве навантаження на сервер, затримка оновлень. Laravel Broadcasting + Pusher/Soketi або власний WebSocket сервер на Node.js — для сповіщень та змін у реальному часі.
CRM-системи
Типовий набір: контакти, компанії, угоди, активності, воронка продажів, звіти. Технічно це нескладно. Складність — в деталях.
Pipeline з кастомними стадіями. Кожна компанія хоче свою воронку. Стадії повинні бути налаштовуваними без деплою. Таблиця pipeline_stages з position, color, is_final, probability — і drag-and-drop для зміни порядку на UI (React DnD або dnd-kit).
Історія змін. Хто і коли змінив статус угоди, поміняв відповідального, додав нотатку. Audit log через Observer або spatie/laravel-activitylog. На UI — timeline з фільтрацією за типом активності.
Інтеграція з поштою. IMAP/SMTP для підключення корпоративної скриньки, автоматична прив'язка вхідних листів до контактів за email-адресою. Це надійно працює тільки при правильній обробці bounce, spam, авто-відповідей — потрібна фільтрація.
Чому ERP — не про код, а про дані?
ERP — це коли CRM, склад, виробництво, бухгалтерія та HR об'єднані в єдину систему. Повний ERP з нуля — рідкісна задача (зазвичай інтегруються з існуючими системами), але модульні системи під конкретний бізнес — регулярна.
Ключовий принцип: фінансові операції повинні бути незмінними. Не UPDATE orders SET status = 'cancelled' — а створення нового запису order_cancellations з посиланням на вихідне замовлення. Це принцип immutable ledger, який спрощує аудит та reconciliation.
Інтеграція з 1С — майже завжди частина ERP-проекту. Двостороння синхронізація: з 1С в портал (довідники, залишки, ціни) та з порталу в 1С (замовлення, документи). RabbitMQ як шина подій між системами надійніше прямого HTTP-взаємодії — у випадку недоступності 1С повідомлення чекають в черзі.
Як влаштовані LMS: платформи навчання
Learning Management System — це курси, модулі, уроки, тести, сертифікати, прогрес користувачів.
Відео-контент — найбільш навантажена частина LMS. Зберігати відео на власному сервері та віддавати через Nginx — погана ідея: дорого, повільно, немає адаптивного бітрейту. Правильно: завантаження в S3/Cloudflare R2, транскодування через AWS Elemental MediaConvert або Mux, HLS-плейлист для адаптивного стрімінгу через Video.js або Plyr.
Прогрес перегляду — через періодичне відправлення watch_position з фронтенду (кожні 10–30 секунд), зберігання в Redis з періодичною синхронізацією в PostgreSQL. Не зберігати кожну секунду в БД — це вб'є продуктивність.
SCORM-сумісність — якщо потрібна інтеграція з корпоративними тренінговими матеріалами. Окремий модуль, є готові бібліотеки (scorm-again).
Intranet та HR-портали
Корпоративний інтранет: новини, документи, оргструктура, HR-процеси (відпустки, заявки, KPI).
Оргструктура в базі даних — це ієрархічна структура. Adjacency list (parent_id на кожному записі) простий в реалізації, але повільний при рекурсивних запитах. Nested Sets або Closure Table швидше для читання ієрархії, складніше при змінах. В PostgreSQL — рекурсивні CTE (WITH RECURSIVE) з adjacency list — баланс між простотою та продуктивністю.
Погодження документів та заявок — workflow engine. Прості лінійні погодження (співробітник → менеджер → HR → бухгалтер) можна зробити без спеціального движка. Нелінійні (паралельні гілки, умовні переходи, делегування) — варто розглянути готові рішення: Temporal.io для workflow orchestration або власний скінченний автомат на базі патерну state-machine.
Що входить в роботу
При замовленні розробки корпоративного порталу ви отримуєте:
- Архітектурну документацію (ER-діаграми, схема інтеграцій, матриця ролей)
- Повний код в Git-репозиторії з CI/CD
- Доступи до інфраструктури (хостинг, бази даних, сховища)
- Навчання адміністраторів та ключових користувачів (2–3 сесії)
- Гарантійну підтримку на 3 місяці після запуску
Наші принципи проєктування спираються на офіційну документацію Laravel з авторизації (Policies) та рекомендації щодо роботи з чергами.
Технічний стек для порталів
| Слой |
Інструменти |
| Backend |
Laravel + PostgreSQL |
| Frontend |
React + TypeScript (Inertia.js або окремий SPA) |
| Real-time |
Laravel Echo + Soketi / Pusher |
| Пошук |
Meilisearch (швидкий старт) або Elasticsearch (об'єм) |
| Черги |
Laravel Queue + Redis |
| Файли |
S3-compatible (MinIO self-hosted або AWS S3) |
| Моніторинг |
Sentry + Telescope (dev) |
Орієнтири за термінами
| Тип порталу |
Термін |
| CRM (базовий) |
10–16 тижнів |
| LMS (курси + відео + тести) |
14–22 тижні |
| HR-портал (відпустки, KPI, оргструктура) |
12–20 тижнів |
| Корпоративний ERP (модульний) |
24–52 тижні |
Вартість розраховується індивідуально після детальної аналітики вимог та рольової моделі. Щоб отримати попередню оцінку, напишіть нам — ми проаналізуємо вашу задачу та запропонуємо оптимальне рішення під ключ.