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
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
POST /api/purchases/supplier-returns/from-supply/{supplyId}: черновик возврата с
преднабором строк из проведённой приёмки (товар/кол-во/цена), поставщик/склад/валюта
и ссылка ReferenceSupplyId. Integration-тест: преднабор + связь.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
66 lines
7.2 KiB
Markdown
66 lines
7.2 KiB
Markdown
# Паритет с МойСкладом — прогресс
|
||
|
||
Задача владельца (08.10): довести процессы до уровня МойСклада и лучше, по выводам
|
||
`docs/moysklad-logic-audit.md`. Правило: «минимум как МойСклад, где можно — лучше».
|
||
|
||
Легенда: [x] готово · [~] частично · [ ] не начато.
|
||
|
||
## План / статус
|
||
1. [~] **Смена кассы**: автооткрытие первой продажей (веб-продажа) — ✅ бэкенд+тест; подбор Cash-счёта,
|
||
размен 0. Длительность/overLimit24h в /current и Z-отчёте — ✅. **Осталось:** автооткрытие на
|
||
POS-синке (AcceptSales), UI-вопрос «размен?», фоновое уведомление админу о >24ч.
|
||
2. [~] **Z-отчёт**: разбивка byProduct (продано/возвращено кол-во+сумма) — ✅ бэкенд+тест. **Осталось:**
|
||
показ в вебе/кассе + печать Z-отчёта по товарам.
|
||
3. [x] **Возврат покупателя**: способ по умолчанию = оплата чека (create-return уже так); иной способ —
|
||
право админа + причина (RefundReason). Бэкенд+тест ✅.
|
||
4. [ ] **Карточка товара** (правки владельца перекрывают аудит):
|
||
- Сохранить можно при наличии Наименования.
|
||
- Единица обязательна, предзаполнена «шт» (пустой не бывает).
|
||
- **Штрихкод ОБЯЗАТЕЛЕН** у любого товара (включая весовые). Нет → автогенерация внутреннего
|
||
EAN-13 (верная контрольная цифра, префикс не пересекается с весовыми/ценовыми префиксами орг.),
|
||
кнопка «Сгенерировать». Импорт без штрихкода — автогенерация. Продажа без штрихкода невозможна.
|
||
- Закупочная цена не обязательна (приходит из приёмки).
|
||
- Цена продажи: без неё сохранить можно, но ПРОДАТЬ нельзя → касса/продажа дают понятное
|
||
сообщение «у товара нет цены продажи» + быстрый ввод цены (по праву).
|
||
- Быстрое создание товара из приёмки/кассы по неизвестному штрихкоду (1 поле + цена).
|
||
- Недостающее ловит фоновая «Проверка данных», а не запрет сохранения.
|
||
5. [~] **«Создать на основании» + связи** — частично: инвентаризация→опр/спис (есть), продажа→возврат
|
||
(create-return, ✅), приёмка→оплата (есть). **Осталось:** приёмка→возврат поставщику с преднабором (from-supply ✅, 0ad);
|
||
единый блок «Связанные документы»/«На основании …» во всех документах.
|
||
6. [x] **Простой режим**: Оприходование/Списание уже отдельные пункты меню для Admin/Кладовщика вне
|
||
зависимости от режима (AppLayout.tsx:111-112 — НЕ за advanced-гейтом). Проверено, ничего не прячем.
|
||
7. [~] **Деньги**: типы названы привычно — «Приход наличных (ПКО)», «Расход наличных (РКО)», «Входящий/
|
||
Исходящий платёж», «Перевод между счетами» (money.ts) ✅. **Осталось:** акт сверки с поставщиком (PDF/печать).
|
||
8. [x] **Главная**: блок «Прибыль за сегодня/месяц» на дашборде (во всех режимах), по /api/dashboard/margin;
|
||
с пометкой «приблизительно, точно после FIFO».
|
||
9. [~] **Статусы на русском** + подсказка: общий `DocStatusBadge` (Черновик/Проведён/Завершена с tooltip
|
||
«что это значит»), применён на списках Приёмок/Продаж/Инвентаризаций. **Осталось:** раскатать на
|
||
остальные страницы (опр/спис/перемещения/возвраты/demands, edit-страницы).
|
||
10. [~] **Тесты/деплой/скрины**: unit+integration по пп.1–4 ✅; деплой+скрины — по ходу.
|
||
|
||
## Коммиты
|
||
- `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.
|
||
- Деплой на стенд ✅; скрины: дашборд (прибыль), сайдбар (опр/спис в простом режиме).
|
||
|
||
## Осталось (честно, НЕ закрыто)
|
||
- П.5 «Создать на основании» сквозной + единый блок «Связанные документы» везде — основной
|
||
незакрытый пункт (частично: инвент→опр/спис, продажа→возврат, приёмка→оплата уже есть).
|
||
- П.1/2 фронт: автооткрытие на POS-синке, UI «размен?», показ+печать Z-отчёта по товарам,
|
||
фоновое уведомление о >24ч.
|
||
- П.7 акт сверки с поставщиком (PDF/печать).
|
||
- П.9 раскатать DocStatusBadge на остальные страницы (опр/спис/перемещения/возвраты/edit).
|
||
- П.4 фронт: кнопка «Сгенерировать» штрихкод в карточке, quick-create UI в кассе/приёмке.
|
||
- e2e-браузер по пунктам; full-chain обновить.
|
||
**DONE не ставим — пункты 5,7 и часть фронта/POS/e2e не закрыты.**
|
||
|
||
## Что НЕ трогаем
|
||
Прод, shared-postgres, global.json, gateway nginx, sklad. FIFO/себестоимость — отдельная
|
||
отложенная тема (п.8 — точная прибыль после FIFO; пока приближённо по текущей себестоимости).
|