Перейти к содержанию

ADR-0002 · Данные: владение внутри одной базы, журнал без персональных данных#

Статус:    принят · 2026-09-18
Метод:     D-07 v1.0 · шаблон ADR v1.2
Участники: сопровождение (3 человека), руководитель операционного блока, юрист

Учебная запись: часть прогона E-03, система вымышлена. Форма и рассуждение настоящие.

Контекст#

Вход — 00-context.md. Границы модулей приняты в ADR-0001: движение · хранение · учёт, одна база.

Область решения — журнал операций и то, что в нём оседает. Это связная группа: 55 % объёма базы, пять пишущих сценариев, три года хранения по регламенту и единственный след, по которому вообще можно объяснить расхождение. Остальные группы данных — отдельные применения документа.

Семь вопросов раздела 1#

Вопрос Ответ
О каких данных речь и кто их пишет Журнал операций. Пять пишущих сценариев — приёмка, выдача, возврат, сортировка, инвентаризация [схема]
Сколько копий уже существует Шесть, и три из них неудаляемы — см. реестр
Какие запросы соединяют их с чужими данными Сверка: журнал × активные посылки × справочник пунктов. Это основной запрос всего кейса [схема]
Какие инварианты требуют атомарности Приёмка: обновить посылку и записать операцию. Сегодня одна транзакция [схема]
Что перестанет работать при отказе хранилища Всё, кроме приёма и выдачи на пункте — те переживают офлайн до 2 ч [схема]
Есть ли данные особого режима и какого ПДн получателя — ФИО и телефон. Сегодня копируются в журнал выдачи [режим]
Сколько потребителей держат соединения Один процесс, один пул. Не сила [схема]

Реестр копий#

Куда Как попадает Доходит ли изменение Можно ли удалить
Основная база Запись — Да
Локальная очередь терминала Операция без связи, до 2 ч Обратное не доходит: терминал не узнаёт об отмене операции Да, но копия эфемерна и её никто не считал
Витрина отчётности Ночная выгрузка Односторонне, раз в сутки Да
Архив журнала, 3 года Перенос из основной базы Нет — неизменяем по регламенту Нет [режим]
Резервные копии базы Еженедельно, хранятся 60 суток Нет Нет, пока не истекут
Бумажный акт выдачи с подписью Печать при выдаче, хранится в пункте год Нет Нет, и он вне системы вовсе [режим]

Реестр — главный результат этапа, и две его строки нашлись только потому, что список составлялся письменно. Локальная очередь терминала не считалась копией никем: она живёт часы и «всё равно уедет». Бумажный акт не считался копией, потому что он не в системе — а персональные данные в нём те же самые, и живут они на год дольше, чем в журнале.

Дисквалификаторы#

Сработали четыре из пяти.

Условие Как выполнено Отменяет или добавляет работу
Копия, из которой нельзя удалить, и в ней данные, подлежащие стиранию ПДн получателя лежат в журнале выдачи; журнал уезжает в трёхлетний архив и в резервные копии. Требование стирания по обращению получателя выполнить нечем [режим] Добавляет работу до разделения — и это главная работа этапа
Разделение размазывает защищаемые данные ПДн сегодня в записи посылки, в журнале выдачи, в отчётности и на бумаге — четыре места Добавляет работу: сузить до одного
Атомарность поперёк линии Приёмка обновляет посылку и пишет операцию; 225 тыс. раз в сутки [замер] Отменяет физическое разделение журнала в отдельное хранилище
Отказ остаётся общим База одна; вынос журнала логически её не делит Отменяет логическое разделение, выданное за физическое
Двойная запись без единого источника порядка Не сработал: сегодня записи нет в двух местах — всё в одной транзакции —

Пятый не сработал сегодня, но сработал бы завтра: любое физическое разделение журнала порождает запись в два места, и без журнала как единственного источника порядка это дефект, а не компромисс.

Рассмотренные варианты#

Ось Что записывать Оставить как есть Владение внутри одной базы База на сервис
Управление изменениями Частей, задеваемых изменением схемы 3 — журнал типизирован по операциям [схема] 1 после обобщения [схема] 1
Отказоустойчивость Частей ляжет с хранилищем 3 3 — база та же 1, но приёмка разрывается
Масштабируемость Разница требований в порядках Неприменимо Два порядка по росту: журнал 100 ГБ/год против 1 ГБ активных посылок [расчёт] — снимается разделением по времени, без разделения владения Порознь
Управление соединениями Потребителей против предела 1 пул 1 пул 2 пула — предел не близок
Тип хранилища Выигрыш от другого типа — Возможен, решается на этапе 4 Возможен
Режим защиты Что обязывает класс и сколько мест держит 4 места [режим] 1 место после выноса ПДн из журнала [режим] 2 места — режим удваивается [режим]
Интеграция: отношения Связи через линию и чем оплачены нет нет Сверка соединяет журнал с посылками — основной запрос уезжает в приложение [схема]
Интеграция: копии Мест синхронизировать 6 6 7 [схема]

Нулевой вариант проигрывает по единственной оси, которая здесь что-то значит — режим защиты, четыре места против одного. По остальным он равен среднему варианту, и это честно: логическое разделение почти ничего не улучшает само по себе.

Физическое разделение отменено двумя дисквалификаторами, а не проиграно по осям.

Решение#

Разделить владение внутри одной базы. Персональные данные получателя в журнал не попадают.

  1. Схема на модуль, единственный писатель журнала. Модуль учёт — единственный, кто вставляет операции; остальные вызывают его. Технически: отдельные схемы БД и раздельные учётные записи, как принято в ADR-0001.
  2. Журнал хранит идентификатор получателя, а не ФИО и телефон. Кто получил — восстанавливается соединением с хранение, пока запись там жива; после стирания — не восстанавливается, и это и есть требуемое поведение.
  3. Разделение журнала по времени: горячие 90 суток в основной таблице, дальше — в архивную, неизменяемую. Сверка ходит по горячему, аудит по архиву. Это снимает разницу в два порядка по росту, не трогая владение.
  4. Бумажный акт остаётся копией ПДн вне системы. Срок хранения год, стирание — физическое уничтожение по регламенту пункта. Система этим не управляет и не притворяется, что управляет.
  5. Локальная очередь терминала объявлена копией и получает срок жизни: операции старше 48 часов не отправляются, а попадают в разбор. Сегодня они отправляются молча в любом возрасте.

Обоснование#

Решил не перевес сил разделения, а класс защищаемых данных. Пять из шести сил разделения дали ноль или «неприменимо»: нагрузки нет, соединений мало, отказ общий в любом случае. Единственная сила, набравшая перевес, — режим защиты, и она перевешивает не в сторону физического разделения, а в сторону сужения: четыре места до одного.

Разделение по времени — не разделение владения, и потому оно не спорит с дисквалификаторами. Разница в два порядка по росту реальна, но она о размере таблицы, а не о владельце.

Лесенка форм пройдена без перепрыгивания (D-07, раздел 4): взята первая ступень. Вторая отменена дисквалификаторами, и это записано, а не оставлено на «потом посмотрим».

Последствия#

Отрицательные:

  • Стирание ПДн становится необратимым для разбора. Сегодня по журналу видно, кому выдали; после правки — только идентификатор, и если запись в хранение стёрта, восстановить получателя нельзя. Это требуемое поведение и одновременно потеря: спор «мне не выдали» через полгода после стирания разрешается только бумажным актом.
  • Резервные копии за 60 суток остаются с ПДн до истечения срока. Полного соответствия требованию стирания нет в течение этих 60 суток, и это записано, а не замолчано.
  • Логическое разделение не даёт отказоустойчивости. База остаётся одна, и с ней ляжет всё, кроме офлайнового приёма и выдачи. Ни одна из сил разделения, кроме режима, не удовлетворена.
  • Обобщение журнала и вынос ПДн — правка на пути каждой операции, при трёх сопровождающих и ручном выкате. Тот же риск, что назван в ADR-0001, и теперь он относится к двум шагам вместо одного.
  • Срок жизни операции в терминале в 48 часов отбросит часть операций в разбор, которых сегодня никто не видит. Сколько — неизвестно: не меряли.

Положительные: режим защиты держит одно место вместо четырёх; сверка получает единственный источник порядка; архив перестаёт быть местом, из которого нельзя стереть то, чего в нём уже нет.

Замечание к методу: сверка нужна там, где миграции нет#

«Сверка» как понятие живёт в D-08 — там она условие обратимости миграции, и там же три её степени. Здесь миграции нет, D-08 в план не входил и не входит, а сверка — предмет всего кейса.

D-07 даёт для неё реестр копий и единственный источник порядка, но не даёт ни степеней сверки, ни вопроса «чем и как часто сверяем». Понятие оказалось шире документа, в котором записано.

Отдельно важное, и оно ограничивает всё дальнейшее. Журнал фиксирует только то, что было отсканировано. Расхождение вида «коробку переставили молча» следа в нём не оставляет по построению. Значит журнал даёт:

Что даёт Что не даёт
Обнаружение противоречий в потоке: выдача без приёмки, две выдачи одной посылки, операция по посылке, которой нет на этом пункте Обнаружение молчаливого расхождения — того самого, из которого складываются 0,4 %
Объяснение расхождения, когда оно уже найдено Сам факт расхождения

Какая доля из 0,4 % ловится потоком, а какая только полкой — [нет данных]: разбор расхождений сегодня не ведётся. Ось не различающая — на выбор формы разделения это не влияет, — поэтому решение не блокируется. Но на этапе 6 без этого числа не выбрать измеритель, и закрывать его придётся там.

Условия пересмотра#

  • Появился второй пишущий в журнал — владение объявлено и нарушено.
  • Разбор расхождений показал, что потоком ловится меньше половины — тогда журнал не является измерителем, и цель в сутки требует другого механизма.
  • Регламент хранения журнала изменился: три года перестали быть неизменяемым архивом.
  • Появилось требование стирать ПДн из резервных копий — тогда нужен крипто-шреддинг, и это другое решение.
  • Объём журнала вырос настолько, что горячие 90 суток перестали помещаться в основную таблицу.
  • База разделена физически по другой причине — тогда возвращаются оба отменённых дисквалификатора.

Самая дорогая будущая граница#

Линия между горячим журналом и архивом. Сегодня она выбрана по сроку сверки — 90 суток, ровно период инвентаризации. Когда период сократится до суток, как требует продукт, граница станет выбрана не тем критерием: горячим должно быть то, по чему ходит сверка, а не то, что помещается. Переносить границу задним числом означает перекладывать архив, который объявлен неизменяемым.

Связанные ADR#

Зависит от: ADR-0001 — владельцы модулей и запрет на чужие таблицы. Зависимые: выбор хранилища под журнал (этап 4), поведение терминала без связи (этап 5), цели и измеритель (этап 6).