From 0ea2c06731abe462af60a0c2540fb15ca6f83a61 Mon Sep 17 00:00:00 2001 From: nns Date: Sun, 4 Oct 2026 21:57:43 +0500 Subject: [PATCH] =?UTF-8?q?docs(s31):=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B5=D1=81=D1=81=208/8=20=E2=9C=93=20+=20=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D0=B3=20=D0=B4=D0=B5=D0=BF=D0=BB=D0=BE=D1=8F=20(=D1=80=D0=B5?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20stage=20auth'd)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Smoke подтверждён на test.admin.food-market.kz после rebuild: - GET /api/purchases/invoices (auth) → 200 (пустой пока). - GET /api/inventory/inventories/mobile-catalog → 200, 321 штрихкод в сжатом слепке. - GET /api/purchases/invoices/counterparty-search → 200. Прод не тронут (API 2 месяца Exited, prod-БД foodmarket-postgres без входящих). Co-Authored-By: Claude Opus 4.7 --- docs/supply-inventory-mobile-progress.md | 48 +++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/supply-inventory-mobile-progress.md b/docs/supply-inventory-mobile-progress.md index 5a04dee..2d5f52a 100644 --- a/docs/supply-inventory-mobile-progress.md +++ b/docs/supply-inventory-mobile-progress.md @@ -46,7 +46,7 @@ Storekeeper. запоминание маппингов, bookQty, расхождения, частичная инв.), integration (накладная → Supply Draft; частичная инв. не трогает другие товары; bookQty = текущий Stock), e2e на стенде. -- [ ] 8. `~/deploy-stage.sh`, ретест, `docs/supply-inventory.md` — +- [x] 8. `~/deploy-stage.sh`, ретест, `docs/supply-inventory.md` — пользовательская инструкция. ## Правила @@ -55,3 +55,49 @@ Storekeeper. `global.json`, gateway nginx, POS WPF. После каждого пункта: build + тесты + коммит порцией + `[x]`. + +## Итог (8/8 ✓) + +**Backend:** `InvoiceUpload` + `InvoiceAlias` domain + миграция +`Phase31a`; `Infrastructure/Invoices/` с 4 файлами (модели, +Claude CLI extractor, matcher, processor+worker); `InvoicesController` +(upload/list/detail/apply + helpers); расширения в `InventoriesController` +(mobile-catalog, add-line, book-drift). Pipeline зарегистрирован как +`BackgroundService` → очередь `pending → parsing → needs_review | failed`. + +**Web:** 4 новые страницы — `InvoicesPage`, `InvoiceReviewPage`, +`SupplyScanPage`, `InventoryMobilePage`. Компонент `CameraScanner` +(@zxing/browser), `lib/offlineCatalog` (IndexedDB). Все mobile-first, +375×667 оптимизированы. Роуты в `App.tsx`. + +**Тесты:** unit 20/20 (InvoiceMatcher 12 + Parse 8), integration 2/2 +(matcher-on-real-catalog + multi-tenant isolation). Pre-existing failures +не связаны с S31. + +**Деплой:** stage успешно пересобран. Проверено auth'd: +- `GET /api/purchases/invoices` → 200 (пустой список). +- `GET /api/inventory/inventories/mobile-catalog` → 200 (321 штрихкод). +- `GET /api/purchases/invoices/counterparty-search?q=…` → 200. + +**Прод:** НЕ тронут (API 2 месяца Exited как было). Прод-БД +`food-market-postgres` не получила ни одного запроса от стенда. + +**Коммиты (хронологически):** +``` +49f1dba feat(s31): приёмка по фото — upload → Claude CLI → match → Supply Draft (1/8) +45c0770 feat(s31): web — список накладных + экран проверки + apply → Supply (2/8) +8f10f70 feat(s31): CameraScanner + scan-mode приёмки с last-purchase price (3/8) +7e52cf6 feat(s31): мобильная инвентаризация — offline-каталог, drift-check, расхождения (4+5+6/8) +2ea9ab4 test(s31): unit 20/20 + integration 2/2 для invoice pipeline (7/8) +c17660c docs(s31): user-facing supply-inventory.md +43cf9ea fix(s31): уберём неиспользуемые импорты — ломали docker-билд web +``` + +**Что в проде отключено по умолчанию:** Claude CLI в прод-compose не +настроен (нет `claude login` на prod-vm в контексте api-контейнера). +Активируется когда прод-API вернётся в строй — тогда настроить +`Invoices:ClaudeCli:RemoteHost` на dev-vm или установить CLI в +контейнере API через расширенный Dockerfile. + +**Не трогал:** `~/ref/sklad` (только читал), прод admin.food-market.kz, +`global.json`, gateway nginx, POS WPF.