Skip to content

mdkefir/editorial-system-case-study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Editorial Management System

Case Study · Diploma Project · Private Repository

Русский   English

Full-stack web system for a scientific journal editorial office · Source code is not published




🇷🇺 Русская версия

Дипломный проект · ИрНИТУ · заказчик — ИСЭМ СО РАН
Информационная система для редакции научного журнала
«Информационные и математические технологии в науке и управлении» (ИМТ)

Статус Приватная разработка
Публикация кода Не раскрывается
Назначение репозитория Портфолио / case study для профиля GitHub

Содержание

  1. Контекст и задача
  2. Реализованный функционал
  3. Архитектура
  4. Инженерные решения
  5. Роли пользователей
  6. Результаты
  7. Ограничения публикации

Контекст и задача

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

Цель проекта — спроектировать и реализовать единую веб-систему, закрывающую полный внутренний редакционный цикл от регистрации рукописи до формирования выпуска, с прозрачным 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-контракты
  • конфигурация инфраструктуры заказчика
  • персональные и редакционные данные

Система разрабатывается и эксплуатируется в закрытом контуре редакции журнала ИМТ.

Дипломный проект — Иркутский национальный исследовательский технический университет (ИрНИТУ)
Заказчик — ИСЭМ СО РАН, редакция журнала ИМТ




🇬🇧 English Version

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

Table of Contents

  1. Context & Problem
  2. Delivered Features
  3. Architecture
  4. Engineering Highlights
  5. User Roles
  6. Outcomes
  7. Publication Scope

Context & Problem

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.


Delivered Features

Editorial Workflow Automation

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

Peer Review & Decision Support

  • 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

Manuscript Processing

  • 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

Communications

  • 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

Collaboration & Security

  • 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

Architecture (Overview)

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)

Key Engineering Decisions

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.


User Roles

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

Outcomes

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)

Publication Scope

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



© 2025–2026 · Private Development · Portfolio Case Study


Русский   English

About

Private full-stack editorial management system (case study). Django · Vue · PostgreSQL · TF-IDF reviewer matching · blind review anonymization. Source code not published.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors