Журнал корректировок запасов: коды причин и история аудита
Настройте журнал корректировок запасов с кодами причин, утверждениями и полной историей аудита, чтобы объяснить каждое изменение и упростить проверки.

Почему изменения остатков нужно объяснять понятно
Корректировка запасов — это ручное изменение того, что система показывает как доступное на складе. Вы не получаете товар и не отгружаете его. Вы исправляете количество, потому что запись и реальность не совпадают.
Это кажется просто, но именно так легко потерять доверие к данным. Если в заметке только «количество изменено», никто не поймёт, было ли это рутинное действие, ошибка или повод для расследования. На аудите «мы исправили» — не доказательство. Менеджеры и аудиторы хотят видеть, что случилось, кто это сделал, когда и почему это было разрешено.
Большинство корректировок происходят по повторяющимся причинам: товар повредили или он просрочен, что-то пропало, пересчёт дал другой результат, поставщик прислал меньше, чем положено, или после отгрузки нашли ошибку при комплектовании.
Чёткие коды причин помогают отделить «ожидаемые списания» (например, повреждение) от «неприемлемых потерь» (например, кража) и от «шумов процесса» (например, исправления после пересчёта). Это упрощает поиск закономерностей, устранение корневых причин и защиту ваших цифр.
«Постоянная история» означает, что вы не перезаписываете прошлое. Каждое изменение сохраняется как отдельная запись с количеством до и после и с деталями принятого решения. Если затем кто-то редактирует причину или заметку, и это редактирование тоже должно фиксироваться. Это важно, потому что запасы влияют на финансовые результаты. Если вы не можете показать цепочку, вы не сможете подтвердить учёт.
Многие начинают с таблицы. По мере роста объёма перенос журнала в простое внутреннее приложение с правами доступа и историей аудита помогает сохранить последовательность записей и затруднить обход контроля.
Коды причин и история аудита: простые определения
Журнал корректировок работает только если каждый раз отвечает на один вопрос: почему изменился запас? Два инструмента делают это возможным: коды причин и история аудита.
Коды причин (и почему они лучше свободного текста)
Код причины — короткая стандартная метка из списка, например Damage, Theft, Recount correction, Expired или Supplier short-ship. Он обеспечивает согласованность, чтобы отчёты могли группировать изменения без догадок о том, что имел в виду автор.
Свободный текст всё ещё важен, но он не заменяет код. Заметки объясняют, что произошло и что вы проверили. Код причины классифицирует событие. Если полагаться только на заметки, получите десять вариантов одного и того же («сломано», «повреждено», «треснуло», «упало»), и данные перестанут быть сопоставимыми.
История аудита (не просто журнал активности)
Журнал активности может сказать «количество изменилось с 12 до 9». История аудита объясняет, как это произошло и соответствовало ли это правилам.
Хорошая история аудита фиксирует, кто сделал изменение и когда, что именно изменилось (товар, локация, количество до и после) и почему это изменили (код причины и заметка).
Для аудита также нужны подтверждающие доказательства: фото повреждённой упаковки, лист пересчёта, документы возврата, запись об утилизации, ссылка на счёт поставщика или номер инцидента. Цель не в том, чтобы собирать бумажки ради бумаги, а в том, чтобы корректировка была защищаемой через месяцы.
Утверждения укрепляют отслеживаемость. Если менеджер утверждает запись, история должна показывать, кто утвердил, когда и что именно было утверждено (включая любые правки). Если вы строите рабочий процесс в AppMaster, можно требовать выбора кода причины и сохранять постоянную историю, чтобы правки не перезаписывали оригинал.
Роли и обязанности при корректировках
Корректировка не должна быть «просто изменением числа». Если люди не знают, кто может менять запасы, когда это можно делать и кто потом это проверяет, журнал корректировок превратится в тихое место для сокрытия ошибок.
Начните с определения, кто может создавать корректировки. Во многих складах это команда, которая обнаружила проблему: приёмка (неполная поставка), возвраты (повреждённый товар) или сотрудники участка при пересчёте. Отдельно определите, кто утверждает, кто публикует и кто анализирует тренды.
Утверждения — это граница между «рутинным» и «чувствительным». Малую отметку за повреждение можно автоутвердить, а всё дорогое, повторяющееся или необычное должно требовать второго человека. Используйте понятные пороги (по стоимости, количеству, типу SKU или коду причины), чтобы правило было однозначным.
Анализ трендов — это другая задача, чем утверждение. Финансы смотрят на влияние на оценку, операционный отдел — на проблемы процесса, отдел по предотвращению потерь — на признаки воровства. Проверки должны быть по расписанию (еженедельно или ежемесячно), а не только когда что-то пошло не так.
Чтобы снизить злоупотребления, разделяйте обязанности: один человек не должен создавать, утверждать и закрывать корректировки. Сделайте так: создатели и утверждающие — разные люди, утверждающие не редактируют оригинальные детали (только подтверждают или отклоняют), а доступ «админ-оверрайд» ограничен и логируется.
Если затем вы автоматизируете роли и утверждения в AppMaster, можно настроить правила доступа и простые потоки утверждения без кода, сохраняя при этом постоянную историю действий и времени.
Какие поля должен содержать журнал корректировок
Журнал корректировок полезен, только если позже кто-то другой сможет прочитать запись и понять, что случилось, кто это сделал и почему это было разрешено. Думайте о записи как о квитанции для каждой смены запасов.
Начните с единообразного заголовка: дата и время, локация (склад, магазин, зона, ячейка), пользователь, который создал запись, и источник (пересчёт, возврат, отчёт о повреждении, синхронизация системы и т. п.).
Далее фиксируйте строковые детали для каждого товара. Аудиты часто проваливаются потому, что команды сохраняют только чистое изменение, а не полную картину до и после.
На уровне строки фиксируйте SKU (и номер партии/серийный/срок годности, если используете), количество до, изменение количества (+ или -), количество после и единицу измерения (шт., короб, кг), чтобы преобразования не портили данные. Добавьте код причины и краткую заметку. Если доказательства хранятся отдельно, сохраняйте ссылку на вложение (ID фото, номер заявки, номер листа пересчёта), чтобы след оставался связан.
Утверждения так же важны, как и цифры. Отслеживайте статус утверждения, имя или роль утверждающего и временные метки для создания, отправки, утверждения и публикации. Если вы позволяете правки, фиксируйте кто редактировал и когда, и храните прежние значения.
Наконец, у каждой корректировки должен быть уникальный идентификатор, который не меняется. Он должен быть доступен для поиска и появляться на связанных документах (листы пересчёта, документы возврата). Внутренний инструмент должен генерировать ID автоматически и блокировать опубликованные корректировки, чтобы история оставалась чистой.
Как спроектировать коды причин, которыми люди будут пользоваться
Коды причин работают только если люди могут выбрать подходящий за пару секунд. Если список длинный, непонятный или полон «другое», журнал превращается в догадки, и аудит усложняется.
Начните с малого. Небольшой набор кодов лучше, чем идеальная таксономия, которой никто не пользуется. Добавляйте новые коды только когда видите повторяющиеся объяснения в заметках.
Практический стартовый набор обычно покрывает основные категории: повреждение (включая просрочку), кража/потеря, исправление после пересчёта, проблемы с поставщиком (недостача или неверный товар) и возвраты.
По возможности делайте коды взаимоисключающими. Например, «Исправление по пересчёту» не должно использоваться для товара, найденного сломанным во время пересчёта — это всё ещё «Повреждение». Пересчёт — способ обнаружения, а не причина.
Пусть каждый код содержит детали, которые понадобятся позже. «Повреждение» само по себе часто слишком общо. Требуйте дополнительных полей, соответствующих коду: тип повреждения (сдавлено, течёт, просрочено) и где случилось (приёмка, сборка/пакетирование, транспорт). Для «Проблемы поставщика» фиксируйте номер заказа и было ли это недопоставкой, неправильной позицией или дефектом.
Удобство принятия повышается, когда коды написаны простым языком, пересечения устранены, «Другое» ограничено и всегда требует заметки, а использование кодов просматривается ежемесячно, чтобы устаревшие коды удалять.
Наконец, решите, какие коды требуют утверждения. Кража, крупные списания и любые корректировки выше порога обычно требуют подписи менеджера. Небольшие исправления после пересчёта могут проходить без этого.
Пошагово: как правильно записывать корректировку
Корректировка не должна начинаться с «просто исправьте число». Она начинается с обнаружения расхождения, затем проверки, и только после этого — изменения запаса.
Простой рабочий процесс, который выдержит аудит
Сначала зафиксируйте расхождение и его контекст: где оно появилось (склад, ячейка, SKU, документ) и кто его нашёл.
Далее проверяйте до любых изменений. Сделайте быстрый пересчёт, проверьте соседние ячейки на предмет неверной укладки, просмотрите документы приёмки и отгрузки и подтвердите единицы измерения (короб vs шт. — частая ошибка). Если расхождение связано с заказом, зафиксируйте его номер.
Затем внесите корректировку последовательно: выберите правильный товар и локацию (и партию/серийный, если используете), введите изменение количества с нужным знаком, выберите один код причины и добавьте краткую заметку о том, что вы проверили и что обнаружили. Добавьте ссылку на доказательство (ID фото, номер листа пересчёта, RMA, номер инцидента) и отправьте на утверждение, если это требуется политикой.
После публикации убедитесь, что система сохраняет исходное значение, новое значение, метку времени и пользователя. Если есть утверждения, сохраняйте имя утверждающего и время утверждения.
Не пропускайте последующие проверки
Проводите ежедневный или еженедельный обзор сводок корректировок. Ищите закономерности: повторяющиеся повреждения в одной зоне, частые исправления по пересчёту у одного SKU или слишком много записей «неизвестно». Если вы строите процесс в AppMaster, можно сделать код причины обязательным, требовать утверждения при превышении порога и предоставить простой экран для проверки руководителям без лишней работы.
Как сохранять постоянную историю изменений
Постоянная история означает, что через месяцы вы сможете ответить на три вопроса без домыслов: что изменилось, кто это сделал и почему. Самый простой путь — относиться к корректировкам как к бухгалтерским проводкам: вы фиксируете события, а не переписываете прошлое.
Делайте опубликованные записи неизменяемыми
После публикации сохраняйте исходные значения и фиксируйте каждое изменение как новую запись. Не редактируйте количество в старой строке, даже если так кажется быстрее. Перезапись стирает контекст и усложняет аудит.
Каждая опубликованная запись должна содержать количество до и после (не только разницу), кто её создал и кто утвердил (если требуется), временные метки для этих действий, код причины и заметку, а также уникальный ID корректировки.
Не позволяйте удалять опубликованные корректировки. Если кто-то ошибся, используйте сторнирование: создайте новую корректировку, которая отменяет ошибочную запись, затем добавьте корректную корректировку с верными числами. Это сохраняет историю и показывает, что коррекция была намеренной.
Когда исправления случаются часто (например, пересчёт показал первоначальную ошибку), связывайте последующие корректировки с оригиналом через поле «связанный ID корректировки». Это упрощает трассировку.
Установите правила хранения и доступа
Решите, как долго хранить историю корректировок и сопутствующие заметки. Многие команды хранят данные годами, потому что аудиторы могут заглянуть далеко в прошлое.
Ограничьте, кто может публиковать, утверждать или отменять корректировки, и логируйте каждое изменение прав доступа. Если вы автоматизируете процесс в AppMaster или другом инструменте, сделайте правило «только добавление» (append-only) частью рабочего процесса, а не просто привычкой.
Распространённые ошибки, которые ломают аудируемость
Большинство проблем с запасами не появляются от одной большой ошибки. Они накапливаются мелкими сокращениями, и в итоге никто не может объяснить, что, когда и почему менялось.
Одна частая проблема — слишком много кодов причин. Когда список длинный или запутанный, люди перестают думать и выбирают ближайший вариант. Данные выглядят упорядоченными, но по сути становятся случайными, и аналитика теряет смысл.
Ещё одна ловушка — только свободный текст в заметках. Заметки помогают, но если каждая корректировка — одна строка текста, нельзя группировать, фильтровать или сравнивать причины со временем. Приходится вручную читать сотни записей.
Изменения с большим влиянием требуют дополнительного контроля. Если любой сотрудник может списать 500 единиц без второго контроля, у вас будет журнал, но он не доказывает правомерность списания.
Некоторые шаблоны работы повторно создают проблемы аудита: массовые правки, которые изменяют много позиций без строковых объяснений, отсутствие деталей вроде локации или номера партии там, где они важны, и «очистка» путём редактирования старых записей вместо создания новой корректирующей записи.
Последнее особенно критично. История аудита — про историю, а не про идеальный результат. Если кто-то ввёл -12 вместо -2, исправление должно быть новой корректировкой, которая сторнирует ошибку, с кодом причины «коррекция ошибки ввода» и короткой заметкой.
Быстрый тест журнала: выберите 10 корректировок и спросите: смог бы новый человек объяснить каждую без дополнительных вопросов? Если нет — ужесточите обязательные поля, сократите и проясните коды причин и добавьте утверждения для рискованных изменений.
Пример: недостающие единицы после пересчёта
При выборочном пересчёте в проходе B обнаружено несоответствие: по штрих-листу у SKU «WIDGET-250» должно быть 200 единиц, а счётчик нашёл 188. Недостаёт 12 единиц, и журнал корректировок должен объяснить, почему изменилась запись, а не просто зафиксировать изменение.
Сначала счётчик проверяет базовые вещи: совпадает ли ярлык ячейки с SKU, есть ли товар в соседних сверхместах, не лежат ли отложенные комплекты в корзинах. Второй сотрудник делает повторный пересчёт. Если повторный пересчёт снова показывает 188, значит дело не в случайном промахе.
Теперь выбирают код причины по имеющимся доказательствам. Если есть запись с камер или сломанная пломба — подойдёт «theft». Если в зоне отгрузки найдена заполненная отгрузка, которая не была списана, то это указывает на ошибку при подборе/транзакции. Если выясняется, что книга учёта была неверной из-за прошлой ошибки пересчёта — используйте «recount correction». Правило простое: выбирайте причину, которую сможете подтвердить.
Крепкая запись делает решение понятным позже: SKU и локация (и партия/серия при необходимости), количество до (200) и после (188), код причины и короткая заметка с ссылкой на доказательство (ID листа пересчёта, номер заявки), кто запросил и кто утвердил, временные метки и ссылки на вложения, если система это поддерживает.
Аудитор сможет проверить, кто считал, кто утверждал, когда это произошло, какие были изменения (минус 12) и почему выбран именно этот код причины.
Быстрый чек-лист для чистого процесса корректировок
Чистый процесс — это не про идеальные подсчёты, а про последовательные записи. Если кто-то откроет журнал через полгода, он должен понять, что изменилось, кто это сделал и почему это было допустимо.
Перед публикацией корректировки проверьте: выбран код причины, добавлена короткая заметка, записано количество до и после (чтобы было видно расчёт), система автоматически захватывает пользователя и время, и при необходимости прикреплены доказательства (фото, RMA, ID листа пересчёта, номер заявки). Если код требует утверждения — получите его до публикации.
Настройте триггеры «требуется утверждение», чтобы сотрудники не гадали. Типичные триггеры: кража или подозрение на неё, списания выше порога, большие расхождения при пересчёте, корректировки, приводящие к отрицательному остатку, и задним числом изменения в закрытые периоды.
Защитите историю. После публикации запись не должна удаляться. Если она ошибочна, отменяйте её новой записью, которая ссылается на оригинал и использует понятный код «коррекция/сторнирование».
Следующие шаги: стандартизируйте, затем автоматизируйте
Стандартизируйте то, что вы уже делаете. Выгрузите корректировки за последние 30–90 дней и перечислите все «причины», которые люди вводили или выбирали. Вы увидите повторяющиеся и расплывчатые записи (например, «misc» или «fix»). Группируйте их в короткий набор, который объясняет изменения без споров.
Держите список достаточно маленьким, чтобы его можно было запомнить. Многие команды приходят к 8–15 кодам с простыми названиями, которые соответствуют реальным ситуациям (damage, theft, supplier short-ship, recount correction, expired, customer return, production scrap). Оставляйте «Другое» только если для него всегда требуется заметка.
Затем зафиксируйте, кто за что отвечает. Журнал корректировок — это не просто запись. Это контроль. Определите, кто создаёт и кто утверждает записи, установите пороги для утверждений, решите, какие доказательства нужны для рискованных причин, и назначьте владельца для каждой локации.
Когда базовые правила устоялись, добавьте простую рутину проверки. Еженедельная 15-минутная проверка часто помогает обнаруживать ранние признаки проблем: повторные корректировки по одному SKU, партиям или одной смене.
Когда будете готовы уйти от таблиц, AppMaster может помочь построить внутренний журнал корректировок с PostgreSQL в основе, обязательными полями, рабочими процессами утверждения и историей «только добавление», которая фиксирует, кто, что и когда изменял.
Вопросы и ответы
An inventory adjustment is a manual correction to the on-hand quantity when the system record doesn’t match reality. It’s not a receipt, transfer, or shipment; it’s an explicit “we are changing the book quantity because we verified it’s wrong.”
Use a reason code to classify why stock changed so you can report and audit consistently. A note explains the specific situation you found, what you checked, and any references like a count sheet or incident number.
Start with a small set that covers your real situations and is easy to choose in a few seconds. Most teams do well with codes for damage/expired, theft or loss, recount or cycle count correction, supplier short-ship or wrong item, and returns, then add only when you see repeated notes that don’t fit.
“Other” is fine as a safety valve, but it should always require a clear note so it doesn’t become a dumping ground. If “Other” shows up often, that’s a signal to create one or two new codes that match what’s really happening.
An activity log might only show that a quantity changed. An audit trail also captures who made the change, when it happened, what exactly changed (including before and after), why it changed (reason code and note), and how it was approved if approvals are required.
Record enough to make the adjustment defensible later, not just believable today. Common proof is a count sheet ID, return paperwork reference, disposal record, supplier document reference, or a photo identifier for damage, so someone can trace the decision months later.
Require approvals for high-risk or unusual changes, like high-value write-offs, theft/loss reasons, big quantity swings, negative stock outcomes, or backdated adjustments. The key is to make the trigger predictable so staff don’t have to guess when manager sign-off is needed.
Separate duties so one person can’t create, approve, and quietly “fix” issues alone. A practical setup is that warehouse staff create adjustments, a manager approves, and a different role (often ops or finance) reviews trends on a schedule.
Don’t edit or delete posted adjustments; create a new entry that reverses the wrong one, then post the correct adjustment with a clear correction reason and note. This keeps the history intact and makes it obvious what happened and how it was fixed.
A spreadsheet works at low volume, but it’s easy to bypass and hard to keep consistent permissions and history. In an internal app built with AppMaster, you can require reason codes, enforce approvals, store before-and-after quantities, and keep an append-only change history so edits don’t overwrite the original record.


