food-market/docs/moysklad-parity-progress.md
nns ad2e3b3117
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
feat(purchases): создать возврат поставщику на основании приёмки (п.5 слайс)
POST /api/purchases/supplier-returns/from-supply/{supplyId}: черновик возврата с
преднабором строк из проведённой приёмки (товар/кол-во/цена), поставщик/склад/валюта
и ссылка ReferenceSupplyId. Integration-тест: преднабор + связь.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 06:16:33 +05:00

66 lines
7.2 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. [~] **Смена кассы**: автооткрытие первой продажей (веб-продажа) — ✅ бэкенд+тест; подбор 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; пока приближённо по текущей себестоимости).