64 lines
7.3 KiB
Markdown
64 lines
7.3 KiB
Markdown
# Паритет с МойСкладом — прогресс
|
||
|
||
Задача владельца (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.
|