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

43 lines
4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отмена инвентаризации не должна удалять проведённые документы
Mac-Claude на стенде 08.10: `POST /api/inventory/inventories/{id}/unpost` при ПРОВЕДЁННЫХ
связанных Оприходовании/Списании молча снимает их с проведения и УДАЛЯЕТ (204, номера О-/С-
исчезают). Хуже МойСклада (там связанные отменяют вручную, история сохраняется). Правило
владельца: «всегда как минимум как в МойСкладе, или лучше».
## Выбор по п.1 (черновики)
Если связанные документы только ЧЕРНОВИКИ — при «вернуть в черновик» их **удаляем** (они не
влияли на остатки, это безопасно и не засоряет историю недо-проведёнными результатами).
Проведённые — никогда не удаляем (см. cancel-results).
## План / статус
1. [x] `unpost` при ПРОВЕДЁННЫХ связанных → **409** с текстом «По инвентаризации проведены
Оприходование О-… и Списание С-…. Сначала отмените результаты» + поля enters/losses.
Только черновики → возврат в черновик + удаление черновиков. (Проверено на стенде.)
2. [x] `POST …/{id}/cancel-results` (InventoryEdit + EnterEdit/LossEdit): снимает связанные
Оприходование/Списание с проведения, НЕ удаляя (остаются черновиками); остатки
возвращаются; гард на уход в минус для Оприходования. (Стенд: статус→Draft, остаток вернулся.)
3. [x] Веб: кнопка «Отменить результаты» (при проведённых связанных) + диалог со списком
документов и влиянием на остатки; «Вернуть в черновик» переформулирован.
4. [x] Мобильное API: unpost больше НЕ удаляет проведённые → 409; docs/mobile-api.md + cancel-results.
5. [x] Аудит `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, план.