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 [схема] |
Нулевой вариант проигрывает по единственной оси, которая здесь что-то значит — режим защиты, четыре места против одного. По остальным он равен среднему варианту, и это честно: логическое разделение почти ничего не улучшает само по себе.
Физическое разделение отменено двумя дисквалификаторами, а не проиграно по осям.
Решение#
Разделить владение внутри одной базы. Персональные данные получателя в журнал не попадают.
- Схема на модуль, единственный писатель журнала. Модуль
учёт— единственный, кто вставляет операции; остальные вызывают его. Технически: отдельные схемы БД и раздельные учётные записи, как принято в ADR-0001. - Журнал хранит идентификатор получателя, а не ФИО и телефон. Кто получил — восстанавливается соединением с
хранение, пока запись там жива; после стирания — не восстанавливается, и это и есть требуемое поведение. - Разделение журнала по времени: горячие 90 суток в основной таблице, дальше — в архивную, неизменяемую. Сверка ходит по горячему, аудит по архиву. Это снимает разницу в два порядка по росту, не трогая владение.
- Бумажный акт остаётся копией ПДн вне системы. Срок хранения год, стирание — физическое уничтожение по регламенту пункта. Система этим не управляет и не притворяется, что управляет.
- Локальная очередь терминала объявлена копией и получает срок жизни: операции старше 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).