Compare commits

...

3 commits

Author SHA1 Message Date
nns 7ede21321b docs(filters-sweep): финальный итог — ворота зелёные, остаток работ
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:39:23 +05:00
nns 4986d85b73 test(uat): расширить mobile-UAT до 16 экранов P1-P4 + обновить отчёт
stage-ui-uat-mobile проходит по 16 спискам P1-P4 на 390px (каталог/контрагенты/
склад/приёмки/продажи/деньги/отчёты/сотрудники): без h-scroll, console-ошибок и 5xx.
Отчёт дополнен: UI-гейтинг по ролям (menu-walk 3/3), окно кассы Windows 11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:37:57 +05:00
nns 28e8d08c55 rebrand: реальное окно кассы на Windows 11 с новым лого ALL MARKET
Снято на win11-kassa-test VM (foodmarket.Pos.exe --demo, software-рендер,
захват из интерактивной сессии). Заголовок окна «ALL MARKET · Касса», крупное
лого all market, «Касса» рядом, экран продажи целиком, таскбар Windows 11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:37:16 +05:00
4 changed files with 51 additions and 13 deletions

View file

@ -118,5 +118,29 @@ _(pageSize=50, время полного HTTP-ответа)_
- [x] (попутно) `food-market.UnitTests` не компилировался (FakeServer не реализовывал - [x] (попутно) `food-market.UnitTests` не компилировался (FakeServer не реализовывал
новый QuickCreateProductAsync) → все юнит-тесты не запускались. Стаб добавлен. Коммит 1324ffd. новый QuickCreateProductAsync) → все юнит-тесты не запускались. Стаб добавлен. Коммит 1324ffd.
## Итог (2026-10-09)
Жалоба владельца «показать нулевые» — исправлена по корню (выборка ОТ Products
LEFT JOIN остатки) и проверена на реальном Demo (30 894 товара): без флага 12,
includeZero → 30 894, <500 мс/страница. Группы (с 3-уровневой вложенностью),
синонимы groupId/productGroupId, артикул+штрихкод для различения дублей — работают.
Попутно починены: будущие времена чеков, causeUserId для всех документов, дружелюбные
русские ошибки ввода; устаревший oversell-тест приведён к политике; разблокирован
проект юнит-тестов.
**Приёмочные ворота (стенд):**
- full-chain C (--api-only): 16/16 ✓ (дважды подряд зелёный)
- filters-sweep: 21/21 ✓
- menu-walk (3 роли): 3/3 ✓
- integration (затронутые классы): 18/18 ✓; unit BusinessTime 5/5 ✓
- mobile-UAT 390px: 16 экранов ✓; окно кассы Windows 11 с новым лого ✓
Коммиты в main (тематические, Co-Authored-By: Claude Opus 4.8; global.json не трогали;
rebrand отдельными коммитами 80070cb/28e8d08). Запушено.
**Остаётся на следующие итерации:** полный per-control UI-UAT P2–P4 (взаимодействие с
каждым контролом формы, граничные значения в браузере) сверх покрытого (loads — menu-walk,
list-фильтры — filters-sweep, ошибки — API-пробы, mobile — 16 экранов); расширение
filters-sweep на остальные web-списки (продажи/приёмки/движения — периоды/статусы/сорт).
## Что НЕ трогаем ## Что НЕ трогаем
Прод, shared-postgres, global.json, gateway nginx, sklad. Прод, shared-postgres, global.json, gateway nginx, sklad.

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View file

@ -45,23 +45,26 @@
| `catalog/counterparties` | пустое имя | «Название обязательно.» (+рус. заголовок) | ✓ | | `catalog/counterparties` | пустое имя | «Название обязательно.» (+рус. заголовок) | ✓ |
| `inventory/transfers` | в простом режиме | 403 «доступно в расширенном режиме» | ✓ | | `inventory/transfers` | в простом режиме | 403 «доступно в расширенном режиме» | ✓ |
### B3. Экраны P1 на ширине телефона (390px) — ✅ ### B3. Экраны P1–P4 на ширине телефона (390px) — ✅
Playwright-спека `stage-ui-uat-mobile.spec.ts` (в nightly-наборе): dashboard, catalog/products, Playwright-спека `stage-ui-uat-mobile.spec.ts` (в nightly-наборе): 16 экранов —
inventory/stock, sales/retail, reports — **без горизонтального скролла**, без console-ошибок и 5xx. dashboard, catalog/products, counterparties, inventory/{stock,movements,enters,losses,
Скриншоты: `tests/e2e/reports/uat-mobile/` (галерея `index.html`). inventories}, purchases/supplies, sales/retail, money/{accounts,shifts}, reports/{sales,
stock,profit}, settings/employees — **без горизонтального скролла**, без console-ошибок и 5xx.
| Экран | 390px без h-scroll | console/5xx | ✓/✗ | Скриншоты: `tests/e2e/reports/uat-mobile/` (галерея `index.html`). Все 16 — ✓.
|---|---|---|---|
| Дашборд | да | чисто | ✓ |
| Товары | да | чисто | ✓ |
| Остатки | да | чисто | ✓ |
| Продажи | да | чисто | ✓ |
| Отчёты | да | чисто | ✓ |
Плюс на «Остатках» (390px): по умолчанию виден товар со стоком с артикулом/штрихкодом, Плюс на «Остатках» (390px): по умолчанию виден товар со стоком с артикулом/штрихкодом,
нулевой скрыт; тумблер «Показать нулевые» показывает нулевой — визуально подтверждено нулевой скрыт; тумблер «Показать нулевые» показывает нулевой — визуально подтверждено
(`stock-includeZero-390.png`). (`stock-includeZero-390.png`).
### B3a. UI-гейтинг прав по ролям (demo-admin/keeper/cashier) — ✅ (попутно)
menu-walk (watchdog step 9) прошёл для 3 ролей и подтвердил разное меню: admin 34 пункта,
keeper 17, cashier 8 — reload каждого пункта без 4xx/5xx/toast.error/console.error. 3/3 ✓.
### B3b. Реальное окно кассы на Windows 11 с новым лого — ✅ (rebrand)
Снято на win11-kassa-test VM (`foodmarket.Pos.exe --demo`): заголовок «ALL MARKET · Касса»,
крупное лого all market, «Касса» рядом, экран продажи целиком, таскбар Windows 11.
`docs/rebrand-screenshots/now-pos-win11.png` (коммит rebrand:, отдельно от фиксов).
### B4. Прочие найденные и починенные баги (детали в filters-sweep-progress.md) ### B4. Прочие найденные и починенные баги (детали в filters-sweep-progress.md)
- Будущие времена в «Последние продажи» — нормализация даты к UTC + clamp будущего. - Будущие времена в «Последние продажи» — нормализация даты к UTC + clamp будущего.
- `causeUserId=null` в алертах минуса — автор пишется для всех типов документов. - `causeUserId=null` в алертах минуса — автор пишется для всех типов документов.

View file

@ -55,9 +55,20 @@ test.describe('UAT mobile 390px', () => {
const pages: [string, string, RegExp][] = [ const pages: [string, string, RegExp][] = [
['/dashboard', 'dashboard', /./], ['/dashboard', 'dashboard', /./],
['/catalog/products', 'catalog-products', /Товары|товар/i], ['/catalog/products', 'catalog-products', /Товары|товар/i],
['/catalog/counterparties', 'counterparties', /./],
['/inventory/stock', 'stock', /Остатки/i], ['/inventory/stock', 'stock', /Остатки/i],
['/inventory/movements', 'movements', /./],
['/inventory/enters', 'enters', /./],
['/inventory/losses', 'losses', /./],
['/inventory/inventories', 'inventories', /./],
['/purchases/supplies', 'supplies', /./],
['/sales/retail', 'sales-retail', /Продажи|чек/i], ['/sales/retail', 'sales-retail', /Продажи|чек/i],
['/reports', 'reports', /Отчёт|отчёт/i], ['/money/accounts', 'money-accounts', /./],
['/money/shifts', 'money-shifts', /./],
['/reports/sales', 'reports-sales', /Отчёт|отчёт|продаж/i],
['/reports/stock', 'reports-stock', /Остат|Отчёт/i],
['/reports/profit', 'reports-profit', /./],
['/settings/employees', 'settings-employees', /./],
] ]
for (const [path, shot, _re] of pages) { for (const [path, shot, _re] of pages) {
await attachSession(page, sess, path) await attachSession(page, sess, path)