food-market/docs/moysklad-parity-progress.md
2026-10-09 07:24:48 +05:00

64 lines
7.3 KiB
Markdown
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.

# Паритет с МойСкладом — прогресс
Задача владельца (08.10): довести процессы до уровня МойСклада и лучше, по выводам
`docs/moysklad-logic-audit.md`. Правило: «минимум как МойСклад, где можно — лучше».
Легенда: [x] готово · [~] частично · [ ] не начато.
## План / статус
1. [x] **Смена кассы**: автооткрытие первой продажей — веб ✅ и **POS-синк** ✅ (подбор Cash-счёта точки,
размен 0); ручное открытие остаётся; overLimit24h в /current и Z-отчёте ✅; **ShiftWatchJob** раз в час
уведомляет кассира/админов о сменах >24ч ✅. (POS-десктоп prompt «размен?» — nicety; сервер открывает с 0.)
2. [x] **Z-отчёт**: byProduct (продано/возвращено) ✅ бэкенд+тест; показ в веб Z-отчёте + печать ✅.
(POS-печать byProduct — отдельная десктоп-поверхность.)
3. [x] **Возврат покупателя**: способ по умолчанию = оплата чека (create-return уже так); иной способ —
право админа + причина (RefundReason). Бэкенд+тест ✅.
4. [x] **Карточка товара** — бэкенд+фронт ✅: кнопка «Сгенерировать» ШК, дефолты шт/корень, продажа без цены → сообщение, **quick-create из кассы** (POS-диалог) ✅:
- Сохранить можно при наличии Наименования.
- Единица обязательна, предзаполнена «шт» (пустой не бывает).
- **Штрихкод ОБЯЗАТЕЛЕН** у любого товара (включая весовые). Нет → автогенерация внутреннего
EAN-13 (верная контрольная цифра, префикс не пересекается с весовыми/ценовыми префиксами орг.),
кнопка «Сгенерировать». Импорт без штрихкода — автогенерация. Продажа без штрихкода невозможна.
- Закупочная цена не обязательна (приходит из приёмки).
- Цена продажи: без неё сохранить можно, но ПРОДАТЬ нельзя → касса/продажа дают понятное
сообщение «у товара нет цены продажи» + быстрый ввод цены (по праву).
- Быстрое создание товара из приёмки/кассы по неизвестному штрихкоду (1 поле + цена).
- Недостающее ловит фоновая «Проверка данных», а не запрет сохранения.
5. [x] **«Создать на основании» + связи**: `GET /api/documents/{type}/{id}/related` (основание + связанные)
+ компонент `RelatedDocsBlock` на приёмке/возврате поставщику/чеке/опр/спис (инвентаризация — свой блок);
приёмка→возврат (from-supply + кнопка), продажа→возврат, инвент→опр/спис, приёмка→оплата. Integration-тест связей.
6. [x] **Простой режим**: Оприходование/Списание уже отдельные пункты меню для Admin/Кладовщика вне
зависимости от режима (AppLayout.tsx:111-112 — НЕ за advanced-гейтом). Проверено, ничего не прячем.
7. [x] **Деньги**: типы названы привычно (ПКО/РКО/Входящий/Исходящий платёж/Перевод между счетами) ✅;
**акт сверки** с поставщиком — эндпоинт + печатная веб-форма /money/.../reconciliation ✅+тест.
8. [x] **Главная**: блок «Прибыль за сегодня/месяц» на дашборде (во всех режимах), по /api/dashboard/margin;
с пометкой «приблизительно, точно после FIFO».
9. [x] **Статусы на русском** + подсказка: `DocStatusBadge` (Черновик/Проведён/Завершена, tooltip «что это
значит») на ВСЕХ списках документов (приёмки/продажи/инвент/опр/спис/перемещения/возвраты/отгрузки).
(edit-страницы — свои заголовки статуса; минор.)
10. [~] **Тесты/деплой/скрины**: unit 303 + integration (9 parity-тестов) + **e2e-браузер 3** ✅; деплой на стенд ✅;
скрины дашборда/карточки. **Осталось:** обновить full-chain под новые правила.
## Коммиты
- `0ca0d6c` — п.4 карточка товара (обяз. только наименование; штрихкод автоген; цена опц.; quick-create).
- `c777b5b` — п.3 возврат (способ по умолчанию = оплата чека; иной — право+причина).
- `ff4391d` — п.1 автооткрытие смены + п.2 Z-отчёт byProduct + 24ч.
- `0f1574d` — п.7 названия денег (ПКО/РКО) + п.8 прибыль на главной + п.9 статусы с подсказкой + п.6 проверен.
## Тесты
- unit: InternalBarcode 3/3; вся сьюта 303.
- integration: ProductCardParity 3/3, RetailReturnParity 1/1, MoneyModule auto-open+Z-отчёт 1/1.
- Деплой на стенд ✅; скрины: дашборд (прибыль), сайдбар (опр/спис в простом режиме).
## Осталось (честно, НЕ закрыто)
- **П.10**: обновить сценарий full-chain под новые правила (автооткрытие смены, продажа без цены,
штрихкод-автоген, статусы) — остальное по тестам закрыто (unit 303 + 9 integration + 3 e2e).
- **POS-десктоп niceties**: prompt «размен в кассе?» при автооткрытии (сервер уже открывает с 0);
разбивка по товарам в Z-отчёте на термопечати кассы (в веб-Z-отчёте уже есть).
**DONE не ставим — остаётся full-chain (п.10) и две POS-десктоп мелочи.**
## Коммиты (пасс 3)
- `1875249` статусы на всех списках + кнопка «Сгенерировать»; `524f8f4` акт сверки;
- `fd03700` приёмка→возврат; `68bfb58` веб Z-отчёт по товарам; `3579e35` блок «Связанные документы»;
- `210e817` POS-автооткрытие смены + ShiftWatchJob 24ч; `cfc335e` e2e паритета; `8c4a9c4` POS quick-create.