# Импорты в Food Market ## Универсальный CSV-импорт товаров Endpoint: `POST /api/catalog/products/import-csv` JSON body со списком rows — клиент парсит CSV, сервер commit'ит транзакцией. См. Sprint 19 docs. ## Импорт из 1С (Бухгалтерия / УТ / Розница) Endpoint: `POST /api/catalog/products/import/1c-csv?autoCreateGroup=true` **Content-Type**: `text/csv`, `text/plain`, `application/octet-stream` или `multipart/form-data` (form-file). **Кодировка**: автодетект — UTF-8 with BOM или Windows-1251 (стандарт 1С Excel-RU). **Разделитель**: автодетект по header-строке — `;` (1С) или `,`. ### Формат заголовка Обязательная колонка: **Наименование** (или `name`). Опциональные (любой регистр, оба языка): | Русский | English | Куда мапится | |---|---|---| | Артикул | code, article | `Product.Article` (создание пока пропускает) | | Наименование | name, title | `Product.Name` | | Единица | unit, ед, ед.изм. | `UnitOfMeasure` по нормализованному коду | | Цена | price, розничная цена | `ProductPrice.Amount` (системный priceType) | | Группа | category, категория, родитель | `ProductGroup.Name` (autoCreate если нет) | | Штрихкод | barcode, штрих-код | `ProductBarcode.Code` (первый, IsPrimary=true) | ### Нормализация единиц `шт`, `штука`, `pcs` → `шт`; `кг`, `kg` → `кг`; `г`, `g` → `г`; `л`, `l` → `л`; `мл`, `ml` → `мл`; `м`, `m` → `м`; `упак`, `уп`, `pack` → `упак`. Если не распознали — передаётся как есть; если такого UnitOfMeasure нет — fallback на дефолтную единицу организации. ### Пример ``` "Артикул";"Наименование";"Единица";"Цена";"Группа";"Штрихкод" "00001";"Молоко 2.5% 1л";"шт";"450";"Молочные продукты";"4870000000017" "00002";"Хлеб белый 500г";"шт";"180";"Хлебобулочные";"4870000000024" "00003";"Гречка";"кг";"650";"Крупы";"" ``` ### Curl-пример ```bash curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: text/csv; charset=windows-1251" \ --data-binary @export-1c.csv \ "https://admin.food-market.kz/api/catalog/products/import/1c-csv?autoCreateGroup=true" ``` ### Ответ ```json { "created": 248, "skipped": 12, "errors": [ { "row": 14, "error": "Дубликат штрихкода в импорте: 4870000000031" } ], "ids": ["...", "..."] } ``` - При **errors.length > 0** транзакция откатывается, ничего не создаётся. - При **created > 0** — все 248 товаров добавлены атомарно. ### Что НЕ импортируется - НДС-ставка (берётся дефолтная Country.VatRate). - Себестоимость (`Cost`) — рассчитывается на первой приёмке. - Изображения (нужен отдельный endpoint загрузки картинок). - Цены типов кроме системной (нужен расширенный CSV-формат). - Поставщики (`DefaultSupplier`) — связь через имя нестабильна. ## Импорт из МойСклад См. `docs/moysklad-import.md` (отдельный flow через OAuth-токен МойСклада).