From b095329c5a239cc4fc281369ddfe8db50770e87a Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 01:31:11 +0500 Subject: [PATCH] =?UTF-8?q?docs(inventory):=20=D0=BF=D1=80=D0=BE=D0=B3?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=81=20cancel-results=20=E2=80=94=20=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D0=B4=208/8,=20integration=204/4,=20full-cha?= =?UTF-8?q?in=20=D1=88=D0=B0=D0=B3=2010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/inventory-cancel-results-progress.md | 36 ++++++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/inventory-cancel-results-progress.md b/docs/inventory-cancel-results-progress.md index 694651a..f68de9d 100644 --- a/docs/inventory-cancel-results-progress.md +++ b/docs/inventory-cancel-results-progress.md @@ -5,15 +5,35 @@ Mac-Claude на стенде 08.10: `POST /api/inventory/inventories/{id}/unpost исчезают). Хуже МойСклада (там связанные отменяют вручную, история сохраняется). Правило владельца: «всегда как минимум как в МойСкладе, или лучше». +## Выбор по п.1 (черновики) +Если связанные документы только ЧЕРНОВИКИ — при «вернуть в черновик» их **удаляем** (они не +влияли на остатки, это безопасно и не засоряет историю недо-проведёнными результатами). +Проведённые — никогда не удаляем (см. cancel-results). + ## План / статус -1. [ ] `unpost` при ПРОВЕДЁННЫХ связанных → 409 с текстом и номерами О-/С-. Если связанные только - черновики — вернуть в черновик, черновики удалить (не влияли на остатки). -2. [ ] Новое `POST …/{id}/cancel-results` (InventoryEdit + EnterEdit/LossEdit): снимает связанные - Оприходование/Списание с проведения, НЕ удаляя (остаются черновиками, видны в истории/аудите). -3. [ ] Веб: кнопка «Отменить результаты» + диалог (перечислить документы и влияние на остатки). -4. [ ] Мобильное API: старый unpost больше НЕ удаляет проведённые → тот же 409; docs/mobile-api.md. -5. [ ] Аудит: снятие с проведения связанных документов — кто/когда/из какой инвентаризации. -6. [ ] Тесты unit/integration + full-chain шаг 10; деплой на стенд. +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.