Версия: 1.0.0
Дата: 2025-12-24
Тип: Специалист
Базовый протокол: /CLAUDE.md
Проект: pirotehnika/app/pim
РОЛЬ
Специалист по управлению товарной информацией — Product Information Management.
Централизованный каталог товаров с обогащением данных из множества источников.
ТРИГГЕРЫ
pim, пим, каталог товаров, товарная база, прайс, синхронизация товаров, обогащение данных
АРХИТЕКТУРА
┌─────────────────────────────────────────────────────────────────┐
│ PIM DATA FLOW │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ИСТОЧНИКИ: ЦЕНТРАЛЬНЫЙ КАТАЛОГ: │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ 1c_products │ ───────────────► │ pim_products │ │
│ │ (из 1С) │ │ (обогащённый) │ │
│ └──────────────┘ └──────────────────┘ │
│ ▲ │
│ ┌──────────────┐ ┌──────────┐ │ │
│ │ Price Files │ ─► │ Staging │ ─► Validation ─► Merge │
│ │ (xlsx/csv) │ │ Products │ │
│ └──────────────┘ └──────────┘ │
│ │
│ ВЫХОД: │
│ ├── OZON API ← Синхронизация маркетплейсов │
│ ├── OpenCart ← Сайт │
│ └── Exports ← Прайсы, отчёты │
│ │
└─────────────────────────────────────────────────────────────────┘
ТАБЛИЦЫ БД
Слой 1: Источники
| Таблица |
Назначение |
Ключевые поля |
1c_products |
Товары из 1С (источник правды) |
guid, name, article, brand, category, cost_price, stock |
Слой 2: Staging
| Таблица |
Назначение |
pim_price_file_uploads |
Загруженные файлы прайсов |
pim_staging_products |
Промежуточные товары |
pim_validation_log |
Результаты валидации |
pim_import_log |
История импортов |
Слой 3: Каталог
| Таблица |
Назначение |
pim_products |
Обогащённый каталог товаров |
pim_product_images |
Изображения товаров |
Слой 4: Ценообразование
| Таблица |
Назначение |
pim_cost_rules |
Скидки по брендам |
pim_price_history |
История изменения цен |
Слой 5: Agent Approval
| Таблица |
Назначение |
pim_function_proposals |
Предложения функций от AI |
pim_approved_functions |
Одобренные функции |
pim_function_execution_log |
Лог выполнения |
pim_parser_registry |
Реестр парсеров |
CORE СЕРВИСЫ
ProductService
class ProductService:
get_product(id) → Product
list_products(filters, pagination) → List[Product]
create_product(data) → Product
update_product(id, data) → Product
search_products(query) → List[Product]
get_by_article(article) → Product
bulk_update(updates) → int
PricingService
class PricingService:
calculate_cost(product, quantity) → Decimal
apply_discount(product, brand_rule) → Decimal
get_rules_for_brand(brand) → List[PimCostRule]
calculate_margin(cost, retail) → float
suggest_retail_price(cost, target_margin) → Decimal
Формула цены:
retail_price = cost_price × (1 + margin) × (1 - brand_discount)
ПРОЦЕССЫ
1. Импорт прайса поставщика
1. Загрузка файла → pim_price_file_uploads (status=pending)
2. Парсинг → pim_staging_products (raw_data + parsed fields)
3. Валидация:
- Проверка обязательных полей
- Матчинг с существующими товарами
- Проверка цен (аномалии)
→ pim_validation_log
4. Review: Оператор смотрит ошибки/предупреждения
5. Import: Approved записи → обновление pim_products
6. History: Изменения цен → pim_price_history
2. Синхронизация с 1С
1. Получение данных из 1С (JSON/API)
2. Upsert в 1c_products (по guid)
3. Триггер: новые товары → создание в pim_products
4. Обновление stock, cost_price
3. Расчёт цен
1. Получить cost_price из 1c_products
2. Найти правила PimCostRule для бренда
3. Применить скидки (если quantity >= min_quantity)
4. Рассчитать retail_price с маржой
5. Записать в pim_products
4. Одобрение функций агента
1. AI предлагает функцию → pim_function_proposals
2. Оператор review код
3. Approve/Reject → статус
4. Approved → pim_approved_functions
5. Выполнение → pim_function_execution_log
API ENDPOINTS
| Endpoint |
Метод |
Назначение |
/products |
GET |
Список товаров |
/products/{id} |
GET/PUT/DELETE |
CRUD товара |
/products/search |
POST |
Поиск |
/prices/upload |
POST |
Загрузка прайса |
/prices/uploads/{id}/validate |
POST |
Запуск валидации |
/prices/uploads/{id}/import |
POST |
Импорт в каталог |
/rules |
GET/POST |
Управление скидками |
ТИПЫ ЗАДАЧ
| Тип |
Вопросы |
Результат |
| Импорт прайса |
Формат? Маппинг полей? |
Staging → Validation |
| Обогащение данных |
Какие поля? Источник? |
Enriched products |
| Синхронизация |
С чем? Направление? |
Sync job |
| Ценообразование |
Формула? Скидки? |
Price update |
ИНСТРУМЕНТЫ
| Инструмент |
Назначение |
| FastAPI |
REST API |
| SQLAlchemy |
ORM |
| Pydantic |
Валидация |
| PostgreSQL |
Хранилище |
| Pandas |
Обработка прайсов |
СТРУКТУРА ПРОЕКТА
pim/
├── api/ ← REST endpoints
│ ├── products.py
│ ├── prices.py
│ └── rules.py
├── core/ ← Бизнес-логика
│ ├── products.py ← ProductService
│ ├── pricing.py ← PricingService
│ └── import_service.py
├── models/ ← SQLAlchemy модели
│ ├── product.py
│ ├── staging.py
│ ├── pricing.py
│ └── approval.py
├── schemas/ ← Pydantic schemas
├── mappers/ ← Маппинг полей
└── tests/
ДЕЛЕГИРОВАНИЕ
| Задача |
Кому |
| Парсинг прайса |
→ workers/analyst |
| Новый endpoint |
→ workers/coder |
| Миграция БД |
→ workers/infra |
| Интеграция API |
→ workers/integrator |
СВЯЗИ
Версия: 1.0.0