Почему обычной маскировки недостаточно, зачем нужна обратимость, как сохранить смысл чисел и почему суммы нельзя просто заменить случайными? Написали обработку, которая действительно заменяет персональные и платёжные реквизиты перед отправкой в модель и затем умеет расшифровать ответ обратно.
В прошлой статье мы разбирали, как передать копию базы 1С подрядчику без реальных персональных данных.
Но есть более локальный сценарий: базу передавать не нужно, а вот отдельную выгрузку хочется отдать нейросети на анализ.
Например, попросить:
разобрать дебиторскую задолженность;
найти аномалии;
сгруппировать контрагентов;
объяснить расхождения;
рассчитать график платежей.
Проблема в том, что в такой выгрузке будут ФИО, ИНН, счета, телефоны и реальные суммы.
ООО "Альфа" Иванов Сергей Петрович ИНН 7701234567 р/с 40702810... Долг: 8 587 500,00
Просто копировать это в ChatGPT, Claude или YandexGPT нельзя. Можно заранее заменить реквизиты вручную. Но тогда возникает другая проблема: как потом читать ответ модели и понимать, кто скрывается за выдуманными именами и цифрами?
Поэтому здесь нужна не просто маскировка, а обратимая псевдонимизация текста.
Схема выглядит так:
1С | v выгрузка | v псевдонимизация | v нейросеть | v ответ модели | v обратная замена | v ответ с настоящими данными
Обработка работает только с тем текстом, который пользователь ей передал. Самостоятельно во внешние сервисы она ничего не отправляет.
Почему случайной замены недостаточно
Возьмем таблицу:
Контрагент Менеджер Долг ООО "Вектор" Иванов И.И. 1 200 000 ООО "Сфера" Иванов И.И. 800 000 ООО "Альфа" Петров П.П. 300 000
Если каждое вхождение Иванов И.И. заменить независимо, модель решит, что первые две строки относятся к разным менеджерам.
Поэтому действует простое правило:
одно исходное значение получает один и тот же псевдоним во всей выгрузке.
Это сохраняет связи, группировки и смысл данных. В реальной выгрузке 1С чувствительных значений гораздо больше, чем ФИО.
Обработка ищет:
ФИО и организации;
ИНН, ИИН, БИН;
ОГРН, ОГРНИП, КПП;
банковские счета, БИК, IBAN;
номера карт;
паспортные данные и СНИЛС;
телефоны и email;
даты рождения и адреса;
автомобильные номера;
денежные суммы.
При этом задача не сводится к простым регулярным выражениям.
Например, ИНН можно проверять по контрольной сумме, банковскую карту — по алгоритму Луна, а email заменять адресом на example.com.
Псевдоним желательно делать не просто случайным, а структурно похожим на оригинал.
Например:
ИНН 7707083893
превращается не в набор случайных цифр, а в другой номер с корректной контрольной суммой. Это полезно, если данные потом обрабатывает не только нейросеть, но и промежуточный парсер или другой инструмент.
Самая интересная часть — суммы
С ФИО все просто:
Иванов -> Соколов ООО "Вектор" -> ООО "Горизонт"
С деньгами сложнее. Если оставить реальные суммы — чувствительные финансовые данные уйдут наружу. Если заменить каждую сумму случайным числом — модель потеряет пропорции:
1 000 000 -> 832 451 2 000 000 -> 174 992 5 000 000 -> 681 357
После такой замены уже нельзя корректно определить, кто должен больше, посчитать доли или найти выбросы. Поэтому все денежные суммы в одной сессии умножаются на один секретный коэффициент.
Условно:
k = 1.73 1 000 000 -> 1 730 000 2 000 000 -> 3 460 000 5 000 000 -> 8 650 000
Абсолютные значения изменились, но сохранились:
отношения;
доли;
порядок;
динамика;
выбросы.
Это позволяет модели анализировать данные почти так же, как исходные.
Почему это позволяет восстановить даже новые расчеты модели
Допустим, мы передали модели измененную сумму и попросили рассчитать ежемесячный платеж. Ответ содержит число, которого раньше вообще не было:
Ежемесячный платеж: 858 870
Обычный словарь замен здесь не поможет: такого значения в нем нет. Но если все денежные значения были умножены на один коэффициент, результат можно преобразовать обратно тем же правилом. Именно поэтому после обратной обработки восстанавливаются не только исходные суммы, но и часть значений, которые модель рассчитала сама. Это одна из главных причин использовать коэффициент, а не случайную замену чисел.
Почему нельзя умножать вообще все числа
Потому что:
НДС 20%
после такой обработки может превратиться, например, в:
НДС 34,6%
и модель сделает неверный вывод.
Поэтому специально не меняются:
проценты;
количества;
даты документов;
номера договоров;
артикулы и коды;
версии платформы;
счета учета вида
20.01.1.
Идея в том, чтобы изменить только то, что действительно нужно скрыть, и максимально сохранить смысл исходных данных.
Обратимость
После анализа модель возвращает ответ уже с псевдонимами:
ООО "Орион" имеет максимальную задолженность. Соколов А.А. отвечает за 42% просроченных платежей.
Обработка прогоняет этот текст через словарь в обратную сторону:
ООО "Орион" -> ООО "Альфа" Соколов А.А. -> Иванов И.И.
И пользователь читает ответ уже с настоящими именами и реквизитами. Без этого псевдонимизация решает только половину задачи.
Где хранить словарь замен
Можно было бы сохранять его в отдельный файл:
mapping.json
Но такой файл фактически является ключом к деанонимизации.
Его можно потерять, случайно отправить вместе с выгрузкой или оставить в общей папке. Поэтому словарь сохраняется средствами самой 1С в стандартном хранилище настроек и привязывается к пользователю. Обработку можно закрыть, перезапустить 1С и вернуться к ответу модели позже. Если словарей несколько, нужный определяется по совпадениям псевдонимов в тексте ответа.
Как выглядит рабочий сценарий
Исходная выгрузка:
Контрагент: ООО "Альфа" Менеджер: Иванов Сергей Петрович ИНН: 7707083893 Долг: 8 587 500,00 Срок просрочки: 94 дня
После обработки:
Контрагент: ООО "Орион" Менеджер: Соколов Алексей Андреевич ИНН: 7721000120 Долг: 13 645 537,50 Срок просрочки: 94 дня
Этот текст можно отправить модели, например с запросом:
Найди основные риски по дебиторской задолженности и предложи график погашения.
После получения ответа он вставляется обратно в обработку, и настоящие имена, реквизиты и суммы возвращаются.
Где заканчивается автоматика
Здесь есть несколько важных ограничений. Во-первых, это не DLP-система. Инструмент работает только с тем текстом, который пользователь ему дал. Во-вторых, гарантированно найти вообще все чувствительные данные невозможно.
Например:
Клиент красный-47
может быть внутренним обозначением конкретного человека, но универсальный алгоритм об этом не узнает. Поэтому результат перед отправкой все равно нужно проверять глазами. Есть и еще одно ограничение: если модель сама изменила формат числа или округлила его:
8 587 500,00 -> около 8,6 млн
точные копейки восстановить уже невозможно. Их просто больше нет в тексте.
Почему это именно псевдонимизация
Если существует словарь:
Соколов -> Иванов ООО "Орион" -> ООО "Альфа"
данные остаются обратимыми. Поэтому речь идет именно о псевдонимизации, а не о полной анонимизации. Это сделано сознательно: без обратимости мы не смогли бы вернуть настоящие данные в ответ нейросети.
Совместимость
Технические требования здесь довольно мягкие:
платформа 1С 8.3.14 и выше;
любая конфигурация, включая самописную;
управляемые формы;
файловая и клиент-серверная база;
тонкий и толстый клиент;
достаточно прав на чтение.
Обработка не изменяет данные информационной базы и использует платформенные методы.
Две задачи — два разных сценария
В прошлой статье мы решали задачу:
база -> псевдонимизация -> копия подрядчику
Здесь задача другая:
выгрузка -> псевдонимизация -> нейросеть -> ответ -> обратная замена
То есть иногда нужно защищать целую копию базы, а иногда — только небольшой фрагмент данных перед конкретной операцией.
Что в итоге
На первый взгляд задача звучит просто:
Как отправить таблицу из 1С в нейросеть, не отправив реальные ФИО и реквизиты?
Но на практике мало просто заменить Иванова на Петрова.
Нужно:
сохранять связи между одинаковыми значениями;
генерировать структурно корректные реквизиты;
не ломать числа, которые важны для анализа;
скрывать суммы с сохранением пропорций;
уметь преобразовывать обратно результаты расчетов модели;
хранить словарь соответствий без ручной работы пользователя;
понимать границы автоматического распознавания.
И главный принцип здесь тот же, что и в случае с копией базы:
Псевдонимизация полезна только тогда, когда после нее данные сохраняют свойства, ради которых мы хотим их анализировать.
Для ФИО это связи. Для реквизитов - структура. Для денежных значений - пропорции. Для ответа нейросети - возможность пройти весь путь обратно и снова увидеть реальные данные.