3.7 KiB
3.7 KiB
Vendor Mapping (Сопоставление partnumber → LOT)
Решение зафиксировано: 2026-02-18
Концепция
lot_partnumbers — канонический контракт сопоставления для внешнего конфигуратора.
Маппинг строго 1:1 по ключу (vendor, partnumber) → lot_name.
Правила
1. Единственная запись на ключ
Запрещено создавать несколько строк для одного ключа (vendor, partnumber).
2. Порядок резолвинга (фиксированный)
1. Точное совпадение: vendor + partnumber → lot_name
2. Fallback: vendor='' + partnumber → lot_name
Резолвер: internal/lotmatch/matcher.go
3. Составные маппинги — через бандлы
Если один внешний partnumber соответствует нескольким LOT — использовать внутренние бандл-таблицы:
lot_partnumbers: (vendor, partnumber) → bundle_lot_name
qt_lot_bundles: bundle_lot_name → [item1, item2, ...]
qt_lot_bundle_items: bundle_lot_name, lot_name, qty
- Bundle LOT — внутренний, скрыт в обычном UI LOT по умолчанию.
- Bundle expansion (разворачивание) происходит только внутри PriceForge при расчёте warehouse-прайслиста.
4. Ignore-логика
- Не использовать
stock_ignore_rulesдля новой логики. - Использовать
qt_vendor_partnumber_seen.is_ignored. qt_vendor_partnumber_seenхранится в формате 1 строка на partnumber (vendor/source не участвуют в уникальности).- Ignore применяется по
partnumber(одинаково для записей с vendor и без vendor).
5. Клиентская совместимость
- Клиент потребляет LOT-based прайслисты (как обычно).
- Bundle expansion/allocation происходит только внутри PriceForge.
Allocation при отсутствии estimate
Если у bundle-компонента нет estimate-цены:
- Fallback: взять из предыдущего активного warehouse-прайслиста.
- Если нет предыдущего — цена
0.
Таблицы БД
| Таблица | Назначение |
|---|---|
lot_partnumbers |
Канонические маппинги (vendor, partnumber) → lot_name |
qt_lot_bundles |
Определения бандлов (bundle LOT → описание) |
qt_lot_bundle_items |
Состав бандла: (bundle_lot_name, lot_name, qty) |
qt_vendor_partnumber_seen |
Реестр seen-записей (уникально по partnumber) + флаг is_ignored |
Миграции:
migrations/023_vendor_partnumber_global_mapping.sqlmigrations/025_dedup_vendor_seen_by_partnumber.sql
Связанные модули
| Роль | Файл |
|---|---|
| Миграция | migrations/023_vendor_partnumber_global_mapping.sql |
| Миграция | migrations/025_dedup_vendor_seen_by_partnumber.sql |
| Резолвер | internal/lotmatch/matcher.go |
| Сервис | internal/services/vendor_mapping.go |
| API | internal/handlers/pricing.go |
| Warehouse calc | internal/warehouse/snapshot.go |
| Stock import seen/ignore | internal/services/stock_import.go |
| Модели | internal/models/lot.go, internal/models/configuration.go |
| Роутинг | cmd/pfs/main.go |