NineLabNineLab.ru
КейсыЦены
Контакты
CASE STUDY
NDA · MedTech

Аудит и стабилизация МИС для сети клиник

Подрядчик ушёл, код передан «как есть». За шесть недель закрыли риски 152-ФЗ, убрали падения базы в утренний пик и снизили облачный бюджет почти вдвое.

О проекте

Федеральная сеть частных медицинских клиник (десятки филиалов, сотни врачей, тысячи приёмов в день). Веб-интерфейс МИС — запись, электронная медкарта, интеграции с лабораториями и 1С — около полутора лет разрабатывал местный подрядчик. Команда распалась, исходники передали без сопровождения. Бизнес получил систему, которая в пик «тупила», иногда ложилась по блокировкам БД и не проходила внутренний аудит по персональным данным.

Боль до старта

Облако дороже плана

Инфраструктура в Yandex Cloud обходилась ≈320 тыс. ₽/мес при ожидании бизнеса около 180 тыс. ₽.

Утренний пик записи

По понедельникам открытие карточки пациента и расписания врача занимало больше 8 секунд — врачи жаловались, что «система тупит».

Падения БД

Раз в месяц в часы пик база упиралась в блокировки: регистраторы не могли провести пациента.

Риски и деньги

Двойные записи на один слот, замечания внутреннего аудита по 152-ФЗ и врачебной тайне, ошибки синхронизации оплат с 1С:Бухгалтерия с дублями платежей.

Итоги после 6 недель

−48%

стоимость Yandex Cloud: 320 → 165 тыс. ₽/мес

0,6 с

p95 открытия карточки в утренний пик (было 8,2 с)

152-ФЗ

повторный внутренний аудит пройден

×4,5

ускорение CI/CD: сборка 18 → 4 мин

Стек на момент аудита

Backend

Основной API на FastAPI, админка и пользователи — Django REST Framework. Очереди через RabbitMQ, фоновые задачи — Celery.


Python 3.11
FastAPI
Django REST
RabbitMQ
Celery
Frontend

SPA для регистратуры и врачей на Angular с UI-китом на базе Angular Material.


Angular 16
TypeScript
Angular Material
Данные и инфраструктура

PostgreSQL для оперативных данных, ClickHouse для отчётов главврачам. Контур в Yandex Cloud: Managed Kubernetes, Managed PostgreSQL, Object Storage. CI — GitLab CE, мониторинг — VictoriaMetrics + Grafana + EFK.


PostgreSQL 14
ClickHouse
Yandex Cloud
GitLab CI
VictoriaMetrics

Что нашли в аудите

Критичные находки по производительности, 152-ФЗ и DevOps.

Архитектура и производительность
  • Синхронный requests.post() к 1С блокировал event loop FastAPI: задержка 1С валила ответы всего API.

  • N+1 в Django ORM в списке пациентов: для 100 записей — 300+ запросов к БД.

  • Нет PgBouncer: новое соединение на каждый запрос, пик упирался в max_connections.

  • Отчёт «Загрузка врачей» в ClickHouse — 40 секунд из‑за full scan в обход materialized views.

Безопасность и 152-ФЗ
  • В Kibana в открытом виде писались ФИО, полисы ОМС/ДМС и диагнозы ICD-10.

  • RBAC только на фронте: через API врач мог читать карты и расписания коллег.

  • JWT в localStorage — уязвимость к XSS.

Инфраструктура и DevOps
  • Over-provisioning нод K8s (16 vCPU / 64 GB) при утилизации ≤20%.

  • Бэкапы Postgres самописным cron без алертов — три недели без актуальных копий.

  • Сборка Angular в CI ~18 минут без кэша node_modules и со старым Webpack.

Что сделали

Три этапа по две недели: сначала безопасность и бэкапы, затем БД и интеграции, затем right-sizing и CI.

Этап 1 · Безопасность, 152-ФЗ, бэкапы
Недели 1–2
  • Middleware FastAPI/Django: маскирование СНИЛС, паспортов и ФИО в логах; парсинг в Fluentd.

  • Жёсткий RBAC: doctor_id в токене проверяется на доступ к patient_id (главврач — все, врач — свои).

  • JWT перенесён в HttpOnly / Secure / SameSite=Strict cookies; Angular-интерсептор шлёт cookie автоматически.

  • Managed PostgreSQL backups в Object Storage с шифрованием и ротацией 30 дней; алерт в Telegram при сбое.

Этап 2 · БД и интеграции
Недели 3–4
  • Интеграция с 1С: httpx.AsyncClient + событие в RabbitMQ; Celery-воркер с exponential backoff — UI регистратора не ждёт 1С.

  • select_related / prefetch_related и точечный RawSQL — убрали N+1.

  • PgBouncer перед Postgres: ошибки Too many clients исчезли.

  • Materialized Views в ClickHouse: отчёт по врачам 40 с → 0,8 с.

Этап 3 · Инфраструктура и CI/CD
Недели 5–6
  • Right-sizing нод: 8 vCPU / 32 GB; часть дисков бэкапов и логов — network-hdd.

  • esbuild вместо Webpack, кэш Docker-слоёв и node_modules в GitLab CI: 18 → 4 минуты.

  • Дашборды VictoriaMetrics и алерты на длину очередей RabbitMQ — сбой интеграции с 1С виден до жалоб пациентов.

Ключевые эффекты

  • Предсказуемый облачный бюджет

    Сняли метрики за месяц и подогнали типы ВМ под реальную утилизацию — без потери SLA в пик записи.

  • Стабильный утренний пик

    Асинхронная 1С, пул соединений и оптимизация ORM убрали «тупёж» карточек и падения по locks.

  • Контур под 152-ФЗ

    Маскирование ПДн в логах, серверный RBAC и безопасные сессии закрыли замечания внутреннего аудита.

Дубли платежей в 1С сведены к нулю


Бэкапы гарантированно создаются и шифруются


XSS и горизонтальное повышение привилегий закрыты

[ Связанные услуги ]

[ Другие кейсы ]

Хотите такой же результат для своего бизнеса?

Давайте обсудим ваш проект и определим ключевые точки роста.
Обсудить мой проект