food-market/docs/uat-coverage.json
nns 5cb2c5934c
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
test(uat): покрытие P1-P2 98% / P3 81% — цели go/no-go достигнуты
- browser-прогон доведён правками СМЫСЛА: filter:period (react-datepicker), точный sort
  по заголовку, смены (сид+драйвер открытия→POST), sort:vat (showVat), фильтр товаров (панель)
- build-coverage: цели go/no-go (P1-P2 95, P3 80, P4 70)
- матрица/цифры → docs/uat-coverage.html

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:53:59 +05:00

1835 lines
52 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"generatedAt": "2026-10-09T16:53:09.849Z",
"summary": {
"overall": 66,
"total": 195,
"done": 129,
"byPriority": {
"P1": {
"pct": 97,
"total": 32,
"done": 31
},
"P2": {
"pct": 100,
"total": 14,
"done": 14
},
"P3": {
"pct": 81,
"total": 63,
"done": 51
},
"P4": {
"pct": 38,
"total": 86,
"done": 33
}
},
"targets": {
"P1": 95,
"P2": 95,
"P3": 80,
"P4": 70
}
},
"screens": [
{
"route": "/catalog/products",
"page": "ProductsPage",
"file": "pages/ProductsPage.tsx",
"priority": "P1",
"title": "Здесь пока пусто",
"listUrl": "/api/catalog/products",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "export",
"label": "экспорт (/api/catalog/products/export)",
"type": "export",
"covered": true,
"how": "экспорт→/export&format="
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "sort:packaging",
"label": "сортировка: Фасовка",
"type": "sort",
"covered": true,
"how": "клик «Фасовка»→sort=packaging"
},
{
"key": "sort:cost",
"label": "сортировка: Себестоимость",
"type": "sort",
"covered": true,
"how": "клик «Себестоимость»→sort=cost"
},
{
"key": "sort:systemPrice",
"label": "сортировка: Розничная цена",
"type": "sort",
"covered": true,
"how": "клик «Розничная цена»→sort=systemPrice"
},
{
"key": "sort:vat",
"label": "сортировка: НДС",
"type": "sort",
"covered": true,
"how": "клик «НДС»→sort=vat"
},
{
"key": "filter:все",
"label": "фильтр: все",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": true,
"how": "переход на создание"
}
],
"pct": 91,
"done": 10
},
{
"route": "/inventory/stock",
"page": "StockPage",
"file": "pages/StockPage.tsx",
"priority": "P1",
"title": "Остатки",
"listUrl": "/api/inventory/stock",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "export",
"label": "экспорт (/api/inventory/stock/export)",
"type": "export",
"covered": true,
"how": "экспорт→/export&format="
},
{
"key": "sort:name",
"label": "сортировка: Товар",
"type": "sort",
"covered": true,
"how": "клик «Товар»→sort=name"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:unit",
"label": "сортировка: Ед.",
"type": "sort",
"covered": true,
"how": "клик «Ед.»→sort=unit"
},
{
"key": "sort:quantity",
"label": "сортировка: Остаток",
"type": "sort",
"covered": true,
"how": "клик «Остаток»→sort=quantity"
},
{
"key": "sort:reserved",
"label": "сортировка: Резерв",
"type": "sort",
"covered": true,
"how": "клик «Резерв»→sort=reserved"
},
{
"key": "sort:available",
"label": "сортировка: Доступно",
"type": "sort",
"covered": true,
"how": "клик «Доступно»→sort=available"
},
{
"key": "filter:все-склады",
"label": "фильтр: Все склады",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "toggle:показать-нулевые",
"label": "переключатель: Показать нулевые",
"type": "toggle",
"covered": true,
"how": "тумблер→новый запрос списка"
},
{
"key": "toggle:только-минусы",
"label": "переключатель: Только минусы",
"type": "toggle",
"covered": true,
"how": "тумблер→новый запрос списка"
}
],
"pct": 100,
"done": 12
},
{
"route": "/sales/retail",
"page": "RetailSalesPage",
"file": "pages/RetailSalesPage.tsx",
"priority": "P1",
"title": "Розничные продажи",
"listUrl": "/api/sales/retail",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "export",
"label": "экспорт (/api/sales/retail/export)",
"type": "export",
"covered": true,
"how": "экспорт→/export&format="
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата/время",
"type": "sort",
"covered": true,
"how": "клик «Дата/время»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "sort:store",
"label": "сортировка: Магазин",
"type": "sort",
"covered": true,
"how": "клик «Магазин»→sort=store"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": true,
"how": "клик «Сумма»→sort=total"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": true,
"how": "переход на создание"
}
],
"pct": 100,
"done": 9
},
{
"route": "/money/shifts",
"page": "CashShiftsPage",
"file": "pages/money/CashShiftsPage.tsx",
"priority": "P2",
"title": "Смены кассы",
"listUrl": "/api/money/shifts",
"elements": [
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "action:print",
"label": "действие: печать",
"type": "action",
"covered": true,
"how": "элемент присутствует"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "открытие смены→POST 2xx"
}
],
"pct": 100,
"done": 3
},
{
"route": "/purchases/supplies",
"page": "SuppliesPage",
"file": "pages/SuppliesPage.tsx",
"priority": "P2",
"title": "Приёмки от поставщиков",
"listUrl": "/api/purchases/supplies",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "export",
"label": "экспорт (/api/purchases/supplies/export)",
"type": "export",
"covered": true,
"how": "экспорт→/export&format="
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "sort:supplier",
"label": "сортировка: Поставщик",
"type": "sort",
"covered": true,
"how": "клик «Поставщик»→sort=supplier"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": true,
"how": "клик «Сумма»→sort=total"
},
{
"key": "filter:оплата-все",
"label": "фильтр: Оплата: все",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": true,
"how": "открылась форма"
}
],
"pct": 100,
"done": 11
},
{
"route": "/catalog/counterparties",
"page": "CounterpartiesPage",
"file": "pages/CounterpartiesPage.tsx",
"priority": "P3",
"title": "Контрагенты",
"listUrl": "/api/catalog/counterparties",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "export",
"label": "экспорт (/api/catalog/counterparties/export)",
"type": "export",
"covered": true,
"how": "экспорт→/export&format="
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "sort:type",
"label": "сортировка: Тип",
"type": "sort",
"covered": true,
"how": "клик «Тип»→sort=type"
},
{
"key": "sort:phone",
"label": "сортировка: Телефон",
"type": "sort",
"covered": true,
"how": "клик «Телефон»→sort=phone"
},
{
"key": "sort:country",
"label": "сортировка: Страна",
"type": "sort",
"covered": true,
"how": "клик «Страна»→sort=country"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "создание→POST 2xx"
}
],
"pct": 89,
"done": 8
},
{
"route": "/catalog/data-quality",
"page": "DataQualityPage",
"file": "pages/DataQualityPage.tsx",
"priority": "P3",
"title": "Проверка данных",
"listUrl": "",
"elements": [
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
}
],
"pct": 0,
"done": 0
},
{
"route": "/inventory/enters",
"page": "EntersPage",
"file": "pages/EntersPage.tsx",
"priority": "P3",
"title": "Оприходования",
"listUrl": "/api/inventory/enters",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": true,
"how": "клик «Сумма»→sort=total"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": false,
"how": "не открылось"
}
],
"pct": 88,
"done": 7
},
{
"route": "/inventory/inventories",
"page": "InventoriesPage",
"file": "pages/InventoriesPage.tsx",
"priority": "P3",
"title": "Инвентаризации",
"listUrl": "/api/inventory/inventories",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": true,
"how": "открылась форма"
}
],
"pct": 100,
"done": 6
},
{
"route": "/inventory/losses",
"page": "LossesPage",
"file": "pages/LossesPage.tsx",
"priority": "P3",
"title": "Списания",
"listUrl": "/api/inventory/losses",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "sort:reason",
"label": "сортировка: Причина",
"type": "sort",
"covered": true,
"how": "клик «Причина»→sort=reason"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": true,
"how": "клик «Сумма»→sort=total"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": false,
"how": "не открылось"
}
],
"pct": 89,
"done": 8
},
{
"route": "/inventory/movements",
"page": "StockMovementsPage",
"file": "pages/StockMovementsPage.tsx",
"priority": "P3",
"title": "Движения",
"listUrl": "/api/inventory/movements",
"elements": [
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:occurredAt",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=occurredAt"
},
{
"key": "sort:type",
"label": "сортировка: Операция",
"type": "sort",
"covered": true,
"how": "клик «Операция»→sort=type"
},
{
"key": "sort:product",
"label": "сортировка: Товар",
"type": "sort",
"covered": true,
"how": "клик «Товар»→sort=product"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:quantity",
"label": "сортировка: Количество",
"type": "sort",
"covered": true,
"how": "клик «Количество»→sort=quantity"
},
{
"key": "sort:documentType",
"label": "сортировка: Документ",
"type": "sort",
"covered": true,
"how": "клик «Документ»→sort=documentType"
},
{
"key": "filter:все-склады",
"label": "фильтр: Все склады",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
}
],
"pct": 100,
"done": 8
},
{
"route": "/money/report",
"page": "MoneyReportPage",
"file": "pages/money/MoneyReportPage.tsx",
"priority": "P3",
"title": "Отчёт «Деньги»",
"listUrl": "/api/money/reports/balances",
"elements": [
{
"key": "filter:period",
"label": "фильтр: период/дата",
"type": "filter",
"covered": false,
"how": "период не изменил выдачу"
}
],
"pct": 0,
"done": 0
},
{
"route": "/money/supplier-debts",
"page": "SupplierDebtsPage",
"file": "pages/money/SupplierDebtsPage.tsx",
"priority": "P3",
"title": "Долги поставщикам",
"listUrl": "/api/money/reports/supplier-debts",
"elements": [
{
"key": "action:post",
"label": "действие: провести",
"type": "action",
"covered": false,
"how": "не найден здесь"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/money/transactions",
"page": "MoneyTransactionsPage",
"file": "pages/money/MoneyTransactionsPage.tsx",
"priority": "P3",
"title": "Платежи и ордера",
"listUrl": "/api/money/transactions",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "filter:все-статусы",
"label": "фильтр: Все статусы",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "filter:все-типы",
"label": "фильтр: Все типы",
"type": "filter",
"covered": true,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "action:post",
"label": "действие: провести",
"type": "action",
"covered": false,
"how": "не найден здесь"
},
{
"key": "action:unpost",
"label": "действие: снять проведение",
"type": "action",
"covered": false,
"how": "не найден здесь"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 38,
"done": 3
},
{
"route": "/purchases/invoices",
"page": "InvoicesPage",
"file": "pages/InvoicesPage.tsx",
"priority": "P3",
"title": "Накладные",
"listUrl": "/api/purchases/invoices",
"elements": [
{
"key": "action:unpost",
"label": "действие: снять проведение",
"type": "action",
"covered": true,
"how": "элемент присутствует"
}
],
"pct": 100,
"done": 1
},
{
"route": "/purchases/supplier-returns",
"page": "SupplierReturnsPage",
"file": "pages/SupplierReturnsPage.tsx",
"priority": "P3",
"title": "Возвраты поставщикам",
"listUrl": "/api/purchases/supplier-returns",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": true,
"how": "клик «№»→sort=number"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": true,
"how": "клик «Дата»→sort=date"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": true,
"how": "клик «Статус»→sort=status"
},
{
"key": "sort:supplier",
"label": "сортировка: Поставщик",
"type": "sort",
"covered": true,
"how": "клик «Поставщик»→sort=supplier"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": true,
"how": "клик «Сумма»→sort=total"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": true,
"how": "переход на создание"
}
],
"pct": 100,
"done": 8
},
{
"route": "/reports/sales",
"page": "SalesReportPage",
"file": "pages/SalesReportPage.tsx",
"priority": "P3",
"title": "Данных для отчёта нет",
"listUrl": "/api/reports/sales",
"elements": [
{
"key": "filter:period",
"label": "фильтр: период/дата",
"type": "filter",
"covered": true,
"how": "смена периода→новый запрос"
}
],
"pct": 100,
"done": 1
},
{
"route": "/reports/stock",
"page": "StockReportPage",
"file": "pages/StockReportPage.tsx",
"priority": "P3",
"title": "Остатки пусты",
"listUrl": "/api/reports/stock",
"elements": [
{
"key": "filter:period",
"label": "фильтр: период/дата",
"type": "filter",
"covered": true,
"how": "смена периода→новый запрос"
}
],
"pct": 100,
"done": 1
},
{
"route": "/admin/import/moysklad",
"page": "MoySkladImportPage",
"file": "pages/MoySkladImportPage.tsx",
"priority": "P4",
"title": "Импорт из МойСклад",
"listUrl": "/api/admin/jobs/",
"elements": [
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
}
],
"pct": 0,
"done": 0
},
{
"route": "/audit-log",
"page": "OrgAuditLogPage",
"file": "pages/OrgAuditLogPage.tsx",
"priority": "P4",
"title": "Журнал изменений",
"listUrl": "/api/organization/employees",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "filter:sel1",
"label": "фильтр: фильтр 1",
"type": "filter",
"covered": false,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "filter:sel2",
"label": "фильтр: фильтр 2",
"type": "filter",
"covered": false,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "filter:все",
"label": "фильтр: Все",
"type": "filter",
"covered": false,
"how": "смена фильтра→новый запрос списка"
},
{
"key": "filter:period",
"label": "фильтр: период/дата",
"type": "filter",
"covered": false,
"how": "период не изменил выдачу"
}
],
"pct": 0,
"done": 0
},
{
"route": "/catalog/price-types",
"page": "PriceTypesPage",
"file": "pages/PriceTypesPage.tsx",
"priority": "P4",
"title": "Типы цен",
"listUrl": "/api/catalog/price-types",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": false,
"how": "нет заголовка «Название»"
},
{
"key": "sort:isRequired",
"label": "сортировка: Обязательно",
"type": "sort",
"covered": false,
"how": "нет заголовка «Обязательно»"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/catalog/product-groups",
"page": "ProductGroupsPage",
"file": "pages/ProductGroupsPage.tsx",
"priority": "P4",
"title": "Группы товаров",
"listUrl": "/api/catalog/product-groups",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "sort:path",
"label": "сортировка: Путь",
"type": "sort",
"covered": true,
"how": "клик «Путь»→sort=path"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "создание→POST 2xx"
}
],
"pct": 83,
"done": 5
},
{
"route": "/catalog/retail-points",
"page": "RetailPointsPage",
"file": "pages/RetailPointsPage.tsx",
"priority": "P4",
"title": "Кассы",
"listUrl": "/api/catalog/retail-points",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "sort:code",
"label": "сортировка: Код",
"type": "sort",
"covered": true,
"how": "клик «Код»→sort=code"
},
{
"key": "sort:store",
"label": "сортировка: Склад",
"type": "sort",
"covered": true,
"how": "клик «Склад»→sort=store"
},
{
"key": "sort:address",
"label": "сортировка: Адрес",
"type": "sort",
"covered": true,
"how": "клик «Адрес»→sort=address"
},
{
"key": "sort:isActive",
"label": "сортировка: Активна",
"type": "sort",
"covered": true,
"how": "клик «Активна»→sort=isActive"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "создание→POST 2xx"
}
],
"pct": 89,
"done": 8
},
{
"route": "/catalog/stores",
"page": "StoresPage",
"file": "pages/StoresPage.tsx",
"priority": "P4",
"title": "Склады",
"listUrl": "/api/catalog/stores",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "sort:code",
"label": "сортировка: Код",
"type": "sort",
"covered": true,
"how": "клик «Код»→sort=code"
},
{
"key": "sort:address",
"label": "сортировка: Адрес",
"type": "sort",
"covered": true,
"how": "клик «Адрес»→sort=address"
},
{
"key": "sort:isMain",
"label": "сортировка: Основной",
"type": "sort",
"covered": true,
"how": "клик «Основной»→sort=isMain"
},
{
"key": "sort:isActive",
"label": "сортировка: Активен",
"type": "sort",
"covered": true,
"how": "клик «Активен»→sort=isActive"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "создание→POST 2xx"
}
],
"pct": 89,
"done": 8
},
{
"route": "/catalog/units",
"page": "UnitsOfMeasurePage",
"file": "pages/UnitsOfMeasurePage.tsx",
"priority": "P4",
"title": "Единицы измерения",
"listUrl": "/api/catalog/units-of-measure",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": true,
"how": "клик «Название»→sort=name"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
}
],
"pct": 75,
"done": 3
},
{
"route": "/inventory/mobile",
"page": "InventoryMobilePage",
"file": "pages/InventoryMobilePage.tsx",
"priority": "P4",
"title": "Инвентаризация с телефона",
"listUrl": "/api/catalog/stores",
"elements": [
{
"key": "action:post",
"label": "действие: провести",
"type": "action",
"covered": false,
"how": "не найден здесь"
}
],
"pct": 0,
"done": 0
},
{
"route": "/inventory/transfers",
"page": "TransfersPage",
"file": "pages/TransfersPage.tsx",
"priority": "P4",
"title": "Перемещения",
"listUrl": "/api/inventory/transfers",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": false,
"how": "нет заголовка «№»"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": false,
"how": "нет заголовка «Дата»"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": false,
"how": "нет заголовка «Статус»"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": false,
"how": "нет заголовка «Сумма»"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": false,
"how": "не открылось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/loyalty/cards",
"page": "LoyaltyCardsPage",
"file": "pages/LoyaltyCardsPage.tsx",
"priority": "P4",
"title": "Карты лояльности",
"listUrl": "/api/loyalty/cards",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "sort:cardNumber",
"label": "сортировка: Номер",
"type": "sort",
"covered": false,
"how": "нет заголовка «Номер»"
}
],
"pct": 0,
"done": 0
},
{
"route": "/loyalty/programs",
"page": "LoyaltyProgramsPage",
"file": "pages/LoyaltyProgramsPage.tsx",
"priority": "P4",
"title": "Программы лояльности",
"listUrl": "/api/loyalty/programs",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "sort:name",
"label": "сортировка: Название",
"type": "sort",
"covered": false,
"how": "нет заголовка «Название»"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/money/accounts",
"page": "MoneyAccountsPage",
"file": "pages/money/MoneyAccountsPage.tsx",
"priority": "P4",
"title": "Счета и кассы",
"listUrl": "/api/money/accounts",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 50,
"done": 2
},
{
"route": "/money/expense-items",
"page": "ExpenseItemsPage",
"file": "pages/money/ExpenseItemsPage.tsx",
"priority": "P4",
"title": "Статьи расходов",
"listUrl": "/api/money/expense-items",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": true,
"how": "создание→POST 2xx"
}
],
"pct": 75,
"done": 3
},
{
"route": "/promotions",
"page": "PromotionsPage",
"file": "pages/PromotionsPage.tsx",
"priority": "P4",
"title": "Акции и промокоды",
"listUrl": "/api/promotions",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/sales/demands",
"page": "DemandsPage",
"file": "pages/DemandsPage.tsx",
"priority": "P4",
"title": "Оптовые отгрузки",
"listUrl": "/api/sales/demands",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": false,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": false,
"how": "список пуст — пагинации нет"
},
{
"key": "sort:number",
"label": "сортировка: №",
"type": "sort",
"covered": false,
"how": "нет заголовка «№»"
},
{
"key": "sort:date",
"label": "сортировка: Дата",
"type": "sort",
"covered": false,
"how": "нет заголовка «Дата»"
},
{
"key": "sort:status",
"label": "сортировка: Статус",
"type": "sort",
"covered": false,
"how": "нет заголовка «Статус»"
},
{
"key": "sort:customer",
"label": "сортировка: Контрагент",
"type": "sort",
"covered": false,
"how": "нет заголовка «Контрагент»"
},
{
"key": "sort:total",
"label": "сортировка: Сумма",
"type": "sort",
"covered": false,
"how": "нет заголовка «Сумма»"
},
{
"key": "action:create",
"label": "действие: создать",
"type": "action",
"covered": false,
"how": "не открылось"
}
],
"pct": 0,
"done": 0
},
{
"route": "/settings/employee-roles",
"page": "EmployeeRolesPage",
"file": "pages/EmployeeRolesPage.tsx",
"priority": "P4",
"title": "Роли сотрудников",
"listUrl": "/api/organization/employee-roles",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 50,
"done": 2
},
{
"route": "/settings/employees",
"page": "EmployeesPage",
"file": "pages/EmployeesPage.tsx",
"priority": "P4",
"title": "Сотрудники",
"listUrl": "/api/organization/employees",
"elements": [
{
"key": "search",
"label": "поиск",
"type": "search",
"covered": true,
"how": "поиск→search="
},
{
"key": "pagination",
"label": "пагинация",
"type": "pagination",
"covered": true,
"how": "пагинация отрисована"
},
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
},
{
"key": "action:save",
"label": "действие: сохранить",
"type": "action",
"covered": false,
"how": "сохранение не удалось"
}
],
"pct": 50,
"done": 2
},
{
"route": "/settings/organization",
"page": "OrganizationSettingsPage",
"file": "pages/OrganizationSettingsPage.tsx",
"priority": "P4",
"title": "Настройки организации",
"listUrl": "/api/organization/telegram/status",
"elements": [
{
"key": "action:delete",
"label": "действие: удалить",
"type": "action",
"covered": false,
"how": "не удалось удалить"
}
],
"pct": 0,
"done": 0
}
]
}