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.