Full-stack web system for a scientific journal editorial office · Source code is not published
Дипломный проект · ИрНИТУ · заказчик — ИСЭМ СО РАН
Информационная система для редакции научного журнала
«Информационные и математические технологии в науке и управлении» (ИМТ)
| Статус | Приватная разработка |
| Публикация кода | Не раскрывается |
| Назначение репозитория | Портфолио / case study для профиля GitHub |
- Контекст и задача
- Реализованный функционал
- Архитектура
- Инженерные решения
- Роли пользователей
- Результаты
- Ограничения публикации
Редакция научного журнала вела учёт статей, рецензентов и переписки в разрозненных инструментах — таблицах, почте и файловых папках. Данный подход создавал риски потери версий рукописей, дублирования рецензентов, задержек в слепом рецензировании и отсутствия единой истории решений по каждой статье.
Цель проекта — спроектировать и реализовать единую веб-систему, закрывающую полный внутренний редакционный цикл от регистрации рукописи до формирования выпуска, с прозрачным workflow, автоматизацией рутины и поддержкой совместной работы редакторов.
| Область | Описание |
|---|---|
| Реестр статей | Версионирование рукописей, статусная модель, журнал активности |
| Выпуски журнала | Управление номерами и привязка статей |
| Корзина | Мягкое удаление с восстановлением и контролируемым окончательным удалением |
| Дашборд | Сводки по статусам, просроченным рецензиям и текущей нагрузке |
- База рецензентов с профилями, научными интересами и учётом загруженности
- Система поддержки принятия решений (СППР) — ранжирование кандидатов по релевантности (TF-IDF), рейтингу и доступности; штрафы за повторные назначения
- Назначение рецензий, контроль сроков, автоматические напоминания по расписанию
- Оценка качества работы рецензентов; автоматическое обогащение профиля интересов
- Парсинг и валидация DOCX: структура, форматирование, статистика текста
- Четырёхпроходное обезличивание для слепого рецензирования — структурная очистка, маскирование персональных данных, зачистка email, санитизация гиперссылок
- Сравнение версий рукописей (diff) с отчётом для редактора
- Построчные и общие комментарии; экспорт DOCX с встроенными комментариями
- SMTP-уведомления авторам и рецензентам по настраиваемым шаблонам
- Контекстная подстановка данных, предпросмотр перед отправкой
- Автоматическое прикрепление обезличенной рукописи к письмам рецензентам
- Полная история исходящих сообщений по каждой статье
- Realtime-присутствие редакторов на карточках сущностей (WebSocket)
- Оптимистичный контроль параллелизма (OCC) — защита от перезаписи чужих изменений
- JWT-аутентификация через HttpOnly cookies, ротация refresh-токенов, rate limiting
- Ролевая модель: редактор и главный редактор
- Импорт и экспорт данных в XLSX
Трёхуровневая SPA-архитектура. Внутренняя структура кодовой базы намеренно не раскрывается.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Vue.js SPA │────▶│ Django REST │────▶│ PostgreSQL │
│ (Frontend) │ │ (Backend) │ │ (Database) │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
│ WebSocket │
└──────────────────────┼──────────▶ ┌─────────────────┐
│ │ Redis │
└───────────▶│ (realtime layer)│
└─────────────────┘
| Слой | Технологии |
|---|---|
| Frontend | Vue 3, Vite, Pinia, PrimeVue, AG Grid |
| Backend | Python 3.12, Django 4.2, Django REST Framework |
| Realtime | Django Channels, WebSocket, Redis |
| Данные | PostgreSQL 16 |
| ML / NLP | scikit-learn (TF-IDF), pymorphy2, NLTK |
| Документы | python-docx, openpyxl |
| Инфраструктура | Docker Compose, Daphne (ASGI) |
СППР на TF-IDF
Подбор рецензента предлагает ранжированный список кандидатов. Весовая формула балансирует научную релевантность (50%), исторический рейтинг рецензента (30%) и текущую загруженность (20%). Нормализация русскоязычных терминов и учёт дубликатов назначений снижают риск смещённого или перегруженного рецензирования.
Слепое рецензирование в DOCX
Word-документы хранят персональные данные в явных полях, в XML-фрагментах email и гиперссылках. Многошаговый конвейер обезличивания учитывает структурные маркеры журнала (УДК, аннотация, ключевые слова) и данные из карточки статьи, формируя файл, готовый к отправке рецензенту без ручной правки.
Совместное редактирование без блокировок
revision-поля на сущностях и протокол OCC: клиент передаёт ожидаемую ревизию, сервер отклоняет устаревшие запросы с 409 Conflict. WebSocket параллельно транслирует присутствие и обновления, чтобы редакторы видели, кто работает с той же статьёй или рецензией.
Безопасность сессий
Токены не попадают в тело JSON-ответов — только в HttpOnly cookies. Смена пароля инвалидирует все активные сессии. Критичные endpoints защищены throttling по IP и роли.
| Роль | Возможности |
|---|---|
| Редактор | Регистрация статей, версии рукописей, назначение рецензентов, переписка, ведение рецензий |
| Главный редактор | Финальные решения по статьям, управление пользователями, импорт/экспорт, очистка корзины, настройки системы |
| Метрика | Эффект |
|---|---|
| Единая точка правды | Статьи, версии, рецензии и переписка в одной системе вместо разрозненных файлов |
| Сокращение рутины | Автоподбор рецензентов, обезличивание, шаблонные письма, напоминания |
| Прослеживаемость | Неизменяемый журнал активности по каждой статье |
| Готовность к продакшену | Контейнеризация, prod-compose, резервное копирование БД, покрытие backend тестами (pytest) |
Данный репозиторий — публичное описание проекта для портфолио. Не публикуется:
- исходный код приложения
- структура модулей и API-контракты
- конфигурация инфраструктуры заказчика
- персональные и редакционные данные
Система разрабатывается и эксплуатируется в закрытом контуре редакции журнала ИМТ.
Дипломный проект — Иркутский национальный исследовательский технический университет (ИрНИТУ)
Заказчик — ИСЭМ СО РАН, редакция журнала ИМТ
Diploma Project · Irkutsk National Research Technical University (INRTU) · Client — ISEM SB RAS
Information system for the editorial office of the scientific journal
"Information and Mathematical Technologies in Science and Management" (IMT)
| Status | Private development |
| Source code | Not disclosed |
| Repository purpose | Portfolio / case study for GitHub profile |
- Context & Problem
- Delivered Features
- Architecture
- Engineering Highlights
- User Roles
- Outcomes
- Publication Scope
The editorial office managed articles, reviewers, and correspondence across disconnected tools — spreadsheets, email, and file folders. This led to risks of lost manuscript versions, duplicate reviewer assignments, delays in blind peer review, and no unified audit trail of editorial decisions per article.
Project goal — design and build a unified web system covering the full internal editorial cycle: from manuscript registration to issue assembly, with transparent workflow, routine automation, and multi-editor collaboration support.
| Area | Description |
|---|---|
| Article registry | Manuscript versioning, status model, per-article activity log |
| Journal issues | Issue management and article-to-issue linking |
| Trash | Soft delete with restore and controlled permanent deletion |
| Dashboard | Status summaries, overdue reviews, current workload |
- Reviewer database with profiles, scientific interests, and workload tracking
- Decision Support System (DSS) — candidate ranking by relevance (TF-IDF), quality rating, and availability; penalties for duplicate assignments
- Review assignment, deadline tracking, scheduled automatic reminders
- Editor ratings for reviewers; automatic enrichment of interest profiles from completed reviews
- DOCX parsing and validation: structure, formatting, text statistics
- Four-pass anonymization for blind peer review — structural cleanup, personal data masking, email scrubbing, hyperlink sanitization
- Manuscript version comparison (diff) with editor-facing reports
- Line-level and general comments; DOCX export with embedded editorial comments
- SMTP notifications to authors and reviewers via configurable templates
- Context-aware variable substitution, send preview
- Automatic attachment of anonymized manuscripts to reviewer emails
- Complete outbound message history per article
- Real-time editor presence on entity cards (WebSocket)
- Optimistic Concurrency Control (OCC) — protection against overwriting concurrent edits
- JWT authentication via HttpOnly cookies, refresh token rotation, rate limiting
- Role model: editor and chief editor
- XLSX data import and export
Three-tier SPA architecture. Internal codebase structure is intentionally not disclosed.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Vue.js SPA │────▶│ Django REST │────▶│ PostgreSQL │
│ (Frontend) │ │ (Backend) │ │ (Database) │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
│ WebSocket │
└──────────────────────┼──────────▶ ┌─────────────────┐
│ │ Redis │
└───────────▶│ (realtime layer)│
└─────────────────┘
| Layer | Technologies |
|---|---|
| Frontend | Vue 3, Vite, Pinia, PrimeVue, AG Grid |
| Backend | Python 3.12, Django 4.2, Django REST Framework |
| Realtime | Django Channels, WebSocket, Redis |
| Data | PostgreSQL 16 |
| ML / NLP | scikit-learn (TF-IDF), pymorphy2, NLTK |
| Documents | python-docx, openpyxl |
| Infrastructure | Docker Compose, Daphne (ASGI) |
TF-IDF Decision Support
Reviewer selection is not manual table lookup — it is a ranked candidate list. A weighted formula balances scientific relevance (50%), historical reviewer rating (30%), and current workload (20%). Russian term normalization and duplicate-assignment penalties reduce biased or overloaded peer review.
Blind Review Anonymization in DOCX
Word documents store personal data not only in explicit fields but also in XML-fragmented emails and hyperlinks. A multi-step anonymization pipeline accounts for journal structural markers (UDC, abstract, keywords) and article card data, producing a file ready to send to reviewers without manual editing.
Collaboration Without Record Locking
Instead of pessimistic locks — revision fields on entities and an OCC protocol: the client sends the expected revision, the server rejects stale requests with 409 Conflict. WebSocket concurrently broadcasts presence and updates so editors see who is working on the same article or review.
Session Security
Tokens never appear in JSON response bodies — only in HttpOnly cookies. Password change invalidates all active sessions. Critical endpoints are protected by IP- and role-based throttling.
| Role | Capabilities |
|---|---|
| Editor | Article registration, manuscript versions, reviewer assignment, correspondence, review management |
| Chief Editor | Final article decisions, user management, import/export, trash cleanup, system settings |
| Area | Impact |
|---|---|
| Single source of truth | Articles, versions, reviews, and correspondence in one system instead of scattered files |
| Reduced manual work | Automated reviewer matching, anonymization, templated emails, reminders |
| Auditability | Immutable activity log per article |
| Production readiness | Containerization, production compose, database backups, backend test coverage (pytest) |
This repository is a public project description for portfolio purposes. Not published:
- application source code
- module structure and API contracts
- client infrastructure configuration
- personal and editorial data
The system is developed and operated within the closed perimeter of the IMT journal editorial office.
Diploma Project — Irkutsk National Research Technical University (INRTU)
Client — ISEM SB RAS, IMT Journal Editorial Office