food-market/docs/inventory-cancel-results-progress.md
nns b095329c5a
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
docs(inventory): прогресс cancel-results — стенд 8/8, integration 4/4, full-chain шаг 10
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:31:11 +05:00

4 KiB
Raw Blame History

Отмена инвентаризации не должна удалять проведённые документы

Mac-Claude на стенде 08.10: POST /api/inventory/inventories/{id}/unpost при ПРОВЕДЁННЫХ связанных Оприходовании/Списании молча снимает их с проведения и УДАЛЯЕТ (204, номера О-/С- исчезают). Хуже МойСклада (там связанные отменяют вручную, история сохраняется). Правило владельца: «всегда как минимум как в МойСкладе, или лучше».

Выбор по п.1 (черновики)

Если связанные документы только ЧЕРНОВИКИ — при «вернуть в черновик» их удаляем (они не влияли на остатки, это безопасно и не засоряет историю недо-проведёнными результатами). Проведённые — никогда не удаляем (см. cancel-results).

План / статус

  1. unpost при ПРОВЕДЁННЫХ связанных → 409 с текстом «По инвентаризации проведены Оприходование О-… и Списание С-…. Сначала отмените результаты» + поля enters/losses. Только черновики → возврат в черновик + удаление черновиков. (Проверено на стенде.)
  2. POST …/{id}/cancel-results (InventoryEdit + EnterEdit/LossEdit): снимает связанные Оприходование/Списание с проведения, НЕ удаляя (остаются черновиками); остатки возвращаются; гард на уход в минус для Оприходования. (Стенд: статус→Draft, остаток вернулся.)
  3. Веб: кнопка «Отменить результаты» (при проведённых связанных) + диалог со списком документов и влиянием на остатки; «Вернуть в черновик» переформулирован.
  4. Мобильное API: unpost больше НЕ удаляет проведённые → 409; docs/mobile-api.md + cancel-results.
  5. Аудит InvCancelResults (≤20 симв.) — кто/когда/из какой инвентаризации, в OrgAuditLog.
  6. [~] Тесты: integration 4/4 (вкл. cancel-results + повторное проведение); обновлены 2 устаревших ассерта. full-chain шаг 10 — расширен (unpost 409 → cancel-results → черновик → повторное проведение); прогон на стенде — ниже. Деплой на стенд: OK (api+web).

Проверка на стенде (live API, свежая орг)

Завоз 10 → инвентаризация факт 13 → create-enter → провести (остаток 13) → unpost → 409 «…Сначала отмените результаты» → cancel-results → 200 (остаток 10, оприходование статус=Draft, НЕ удалено, видно в related как черновик) → повторное проведение → остаток снова 13. 8/8 ✅ (scratchpad/cancel-results-test.sh).

Грабли

  • Аудит-экшен «InventoryCancelResults» (22 симв.) не влезал в OrgAuditLog.Action varchar(20) → SqlState 22001 → 500. Укоротил до «InvCancelResults» (16). Аудит пишется в той же транзакции.

Что НЕ трогаем

Прод, shared-postgres, global.json, gateway nginx, sklad.

Журнал

  • 08.10 — старт: разбор текущего unpost, план.