- docs/imports.md, docs/simple-mode.md: «Food Market» → «ALL MARKET». - Перегенерированы скриншоты кассы (вход/продажа/оплата/смена/возврат) с логотипом ALL MARKET в шапке и на экране входа. - Внутренние TZ/verify-доки оставлены как историческая фиксация. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
92 lines
3.7 KiB
Markdown
92 lines
3.7 KiB
Markdown
# Импорты в ALL 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-токен МойСклада).
|