docs(stock): прогресс negative-stock — задел push выложен, скрины баннера/фильтра на стенде
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nns 2026-10-09 02:33:52 +05:00
parent 3547e823c3
commit 242f48ff9f

View file

@ -39,11 +39,16 @@
ровно с минусовыми товарами (BookQty = текущий отрицательный остаток), открывается из баннера. ровно с минусовыми товарами (BookQty = текущий отрицательный остаток), открывается из баннера.
5. [~] Каналы: **веб** — постоянный баннер + фильтр/пометка в остатках ✓; отчёт «Отрицательные» (фильтр 5. [~] Каналы: **веб** — постоянный баннер + фильтр/пометка в остатках ✓; отчёт «Отрицательные» (фильтр
`negativeOnly`) ✓. **Мобильное API** — `GET /api/negative-stock` + `/count` готовы (iOS читает) ✓. `negativeOnly`) ✓. **Мобильное API** — `GET /api/negative-stock` + `/count` готовы (iOS читает) ✓.
**Отложено:** центр уведомлений (realtime-событие NegativeStock), Telegram-рассылка, Web Push **APNs-заглушка заложена** ✓ — таблица `device_tokens` (Phase40) + `POST/DELETE /api/me/device-tokens`
(VAPID + SW), APNs-заглушка (device tokens + IPushSender). + контракт `IPushSender`, в DI `StubPushSender` (лог); реальный APNs/FCM/VAPID подменит заглушку
без правок вызова. Описано в `docs/mobile-api.md`. **Отложено:** центр уведомлений (realtime-событие
NegativeStock), Telegram-рассылка, Web Push (VAPID + SW), реальная отправка push.
6. [~] Тесты: integration **2/2** (минус разрешён → алерт → recount → авто-закрытие; фильтр negativeOnly) ✓; 6. [~] Тесты: integration **2/2** (минус разрешён → алерт → recount → авто-закрытие; фильтр negativeOnly) ✓;
full-chain шаг 9/13 переписаны (oversell/отмена приёмки → проведено + предупреждение) ✓. full-chain шаг 9/13 переписаны (oversell/отмена приёмки → проведено + предупреждение) ✓.
**Отложено:** unit на агрегацию/дебаунс (нет job), e2e в браузере на баннер. Деплой/скрины — ниже. **Скрины на стенде** ✓ — `tests/e2e/reports/neg-banner-home-*.png` (баннер «22 товаров в минусе»),
`neg-stock-filter-*.png` (фильтр «Только минусы» + красные остатки). Стенд-smoke: `/count` 200,
`/api/negative-stock` 200, `device-tokens` DELETE 204 (Phase39+Phase40 применились).
**Отложено:** unit на агрегацию/дебаунс (нет job), e2e в браузере на баннер.
7. [x] Снята блокировка продажи в минус: розница, касса (POS-синк), опт, списание, перемещение, 7. [x] Снята блокировка продажи в минус: розница, касса (POS-синк), опт, списание, перемещение,
возврат поставщику, отмена приёмки. Деньги (минус счёта) — не трогали (другое правило). возврат поставщику, отмена приёмки. Деньги (минус счёта) — не трогали (другое правило).
8. [ ] **Отложено** (десктопная Avalonia-касса): предупреждение в строке + жёлтый индикатор в шапке + 8. [ ] **Отложено** (десктопная Avalonia-касса): предупреждение в строке + жёлтый индикатор в шапке +
@ -61,8 +66,8 @@
## Что отложено (заложен фундамент, нужен отдельный проход) ## Что отложено (заложен фундамент, нужен отдельный проход)
Фоновая рассылка (email/telegram, агрегация/тихие часы/получатели/настройки), эскалация-job и Фоновая рассылка (email/telegram, агрегация/тихие часы/получатели/настройки), эскалация-job и
«просроченные минусы», центр уведомлений (realtime-событие), Web Push (VAPID), APNs-заглушка «просроченные минусы», центр уведомлений (realtime-событие), Web Push (VAPID), **реальная**
(device tokens + IPushSender), индикаторы в десктопной Avalonia-кассе (в т.ч. офлайн). отправка push (APNs/FCM — заглушка уже в DI), индикаторы в десктопной Avalonia-кассе (в т.ч. офлайн).
**DONE не ставим — не все пункты закрыты.** **DONE не ставим — не все пункты закрыты.**
## Что НЕ трогаем ## Что НЕ трогаем
@ -70,3 +75,8 @@
## Журнал ## Журнал
- 09.10 — старт: прогресс-док, сверка с МойСкладом, обследование кода. - 09.10 — старт: прогресс-док, сверка с МойСкладом, обследование кода.
- 09.10 — ядро выложено на стенд (9ba1edb): разрешение минуса + детекция/авто-закрытие +
API (список/счётчик/recount/фильтр) + веб-баннер/пометки + integration 2/2.
- 09.10 — задел push (3547e82): `device_tokens` (Phase40) + `IPushSender`/`StubPushSender` +
`/api/me/device-tokens`, описано в `docs/mobile-api.md`. Выложено на стенд, Phase39+Phase40
применились (`/api/negative-stock/count` → 200). Скрины баннера + фильтра минусов сняты.