food-market/docs/moysklad-parity-progress.md
nns 0ca0d6cc3b
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(catalog): карточка товара как МойСклад+ — обязательно только наименование
Правки владельца 08.10 (п.4 паритета):
- Сохранить можно при наличии Наименования. Единица не обязательна в запросе →
  дефолт «шт»; группа → корень. Штрихкод ОБЯЗАТЕЛЕН у любого товара: нет в запросе/
  импорте → автогенерация внутреннего EAN-13 (верная контр. цифра, префикс не
  пересекается с весовыми/ценовыми префиксами орг. — InternalBarcode).
- Цена продажи не обязательна для сохранения; но ПРОДАТЬ без неё нельзя — касса и
  розничная продажа дают «У товара «X» нет цены продажи» (можно ввести вручную).
- Быстрое создание из кассы/приёмки: POST /api/catalog/products/quick (имя + опц.
  штрихкод/цена/весовой).
- Снят FluentValidation NotEqual(Guid.Empty) на единицу (контроллер подставляет дефолт).

Тесты: unit InternalBarcode 3/3 (валидный EAN-13, не парсится как весовой, обходит
префиксы); integration 3/3 (создание по одному имени, продажа без цены → 400, quick).

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

4.1 KiB
Raw Blame History

Паритет с МойСкладом — прогресс

Задача владельца (08.10): довести процессы до уровня МойСклада и лучше, по выводам docs/moysklad-logic-audit.md. Правило: «минимум как МойСклад, где можно — лучше».

Легенда: [x] готово · [~] частично · [ ] не начато.

План / статус

  1. Смена кассы: автооткрытие первой продажей/внесением (вопрос «размен?», можно пропустить); ручное открытие остаётся; длительность >24ч — предупреждение кассиру/админу + отметка в отчёте. POS + веб.
  2. Z-отчёт: разбивка по товарам (кол-во, выручка, возвраты) + печать.
  3. Возврат покупателя: способ возврата = способ оплаты исходного чека по умолчанию; другой — только по праву администратора, с причиной.
  4. Карточка товара (правки владельца перекрывают аудит):
    • Сохранить можно при наличии Наименования.
    • Единица обязательна, предзаполнена «шт» (пустой не бывает).
    • Штрихкод ОБЯЗАТЕЛЕН у любого товара (включая весовые). Нет → автогенерация внутреннего EAN-13 (верная контрольная цифра, префикс не пересекается с весовыми/ценовыми префиксами орг.), кнопка «Сгенерировать». Импорт без штрихкода — автогенерация. Продажа без штрихкода невозможна.
    • Закупочная цена не обязательна (приходит из приёмки).
    • Цена продажи: без неё сохранить можно, но ПРОДАТЬ нельзя → касса/продажа дают понятное сообщение «у товара нет цены продажи» + быстрый ввод цены (по праву).
    • Быстрое создание товара из приёмки/кассы по неизвестному штрихкоду (1 поле + цена).
    • Недостающее ловит фоновая «Проверка данных», а не запрет сохранения.
  5. «Создать на основании» + связи — сквозной механизм для всех документов; блок «Связанные документы» и «На основании …» везде (инвентаризация — уже).
  6. Простой режим: Оприходование/Списание остаются отдельными пунктами (НЕ прятать).
  7. Деньги: единый журнал, но типы назвать привычно (ПКО/РКО/вх/исх платёж/перевод); акт сверки с поставщиком (печать/PDF).
  8. Главная простого режима: блок «Прибыль за сегодня/месяц» (точная — после FIFO).
  9. Статусы на русском: Черновик / Проведён / Завершена + подсказка при наведении.
  10. Тесты (unit/integration/e2e) по каждому пункту; full-chain; деплой; скриншоты.

Коммиты

(заполняется по ходу)

Что НЕ трогаем

Прод, shared-postgres, global.json, gateway nginx, sklad. FIFO/себестоимость — отдельная отложенная тема (п.8 — точная прибыль после FIFO; пока приближённо по текущей себестоимости).