# Паритет с МойСкладом — прогресс Задача владельца (08.10): довести процессы до уровня МойСклада и лучше, по выводам `docs/moysklad-logic-audit.md`. Правило: «минимум как МойСклад, где можно — лучше». Легенда: [x] готово · [~] частично · [ ] не начато. ## План / статус 1. [x] **Смена кассы**: автооткрытие первой продажей — веб ✅ и **POS** ✅ (вопрос «размен?» с пропуском в кассе; сервер-синк тоже автооткрывает); ручное открытие остаётся; overLimit24h в /current и Z-отчёте ✅; **ShiftWatchJob** раз в час уведомляет кассира/админов о сменах >24ч ✅. 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. [x] **Тесты/деплой/скрины**: unit 303 + integration (10 parity-тестов) + **e2e-браузер 3** + POS smoke/uitest ✅; **full-chain обновлён** (автооткрытие вместо 409 + byProduct в Z-отчёте) — прогон на стенде **16 ✓ / 0 ✗** ✅; деплой на стенд ✅; скрины дашборда/карточки/сайдбара ✅. ## Коммиты - `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 пунктов выполнены ([x]).** Паритет с МойСкладом достигнут на основных поверхностях (веб-админка, сервер, касса POS) + улучшения по правилу владельца. FIFO/себестоимость — отдельная отложенная тема (п.8 прибыль пока приближённая; точной станет после FIFO). **Все [x] → touch ~/.fm-watchdog/DONE.** ## Коммиты (пасс 3) - `1875249` статусы на всех списках + кнопка «Сгенерировать»; `524f8f4` акт сверки; - `fd03700` приёмка→возврат; `68bfb58` веб Z-отчёт по товарам; `3579e35` блок «Связанные документы»; - `210e817` POS-автооткрытие смены + ShiftWatchJob 24ч; `cfc335e` e2e паритета; `8c4a9c4` POS quick-create.