K
Klado · PIM Catalog Core
Собираю UI-демо…
K Klado · PIM Catalog Core UI demo · interactive
v1
Планшет/мобила: боковая панель — по кнопке «Меню каталога».
{{ colTitle }}
{{ colSub }}
{{ v.head }}
{{ structTitle }}
КаталогВолна · MAIN
Схема{{ schemaLabel }}
{{ crumbSection }} {{ crumbView }} {{ crumb3 }}
⌘K

{{ title }}

{{ subtitle }}

{{ headerMeta }}
Последствия
{{ pending.title }}
{{ w.k }} {{ w.v }}
{{ pending.confirmLabel }} Отмена
{{ f.label }}
{{ pageLabel }}
Выбрано {{ pickedCount }} bulk-операция идемпотентна по (import_run_id, batch_id)
Товар
Тип товара
Вид
Классификация
Готовность
golden_v
{{ p.name }}
{{ p.code }}
{{ p.type }}
{{ p.kind }}
{{ p.cat }}
{{ p.completeness }}
{{ p.gv }}
{{ pageLabel }} Загрузить ещё 25
В демо-наборе нет товаров, попадающих в эту выборку. Счётчик слева показывает размер выборки на полном каталоге.

{{ cur.name }}

{{ cur.code }}·{{ cur.type }}·{{ cur.schema }} {{ cur.kind }} {{ cur.lifecycle }}
golden_version
{{ cur.gv }}
Готовность
{{ cur.readiness }}
{{ g.title }}
{{ r.name }}
{{ r.code }}
{{ r.disp }}
{{ r.stateLabel }}
{{ r.srcLabel }}
Variant axes · product_variant_axes
position {{ a.pos }}
{{ a.name }}
{{ a.code }}
Вариант
variant_signature
Собственные
golden_v
{{ v.name }}
{{ v.code }}
{{ v.sig }}
{{ v.own }}
{{ v.gv }}
Проверка инварианта 17
UNIQUE(parent_product_id, variant_signature) — попытка создать дубликат комбинации осей
Создать дубликат варианта
Компонент
Роль
Кол-во
position
{{ c.name }}
{{ c.code }}
{{ c.role }}
{{ c.qty }}
{{ c.pos }}
Состав хранится в product_components и не участвует в наследовании атрибутов (инвариант 18).
Тип
Значение
normalized_value
Источник
primary
{{ i.type }}
{{ i.value }}
{{ i.norm }}
{{ i.source }}
{{ i.primary }}
UNIQUE(catalog_id, normalized_value) WHERE identifier_type='GTIN' AND status='ACTIVE'
{{ k.k }}
{{ k.v }}
{{ k.s }}
Товар
Тип
required
critical
completeness
readiness
{{ r.name }}
{{ r.code }}
{{ r.type }}
{{ r.req }}
{{ r.crit }}
{{ r.pctLabel }}
{{ r.status }}
product_issues
кликните строку — откроется панель происхождения значения
{{ i.sev }} {{ i.type }}
{{ i.product }}
{{ i.attr }}
{{ i.code }}
{{ i.d }}
Сбросить Новый атрибут
Область {{ attrScope }} {{ attrScopeCode }} Домен выбирается в структуре слева
owner {{ c.label }}
value_type {{ c.label }}
Атрибут
value_type
owner
quantity / ref
canonical
scope
типов
{{ a.name }}
{{ a.code }}
{{ a.vt }}
{{ a.card }}
{{ a.own }}
{{ a.qk }}
{{ a.unit }}
{{ a.scope }}
{{ a.nt }}
{{ attrCount }} index (catalog_id, code)
Units · {{ qkCur }}
{{ qkNote }}
{{ unitCount }}
code
symbol
type
scale
offset
unit_aliases
{{ u.code }}{{ u.base }}
{{ u.ru }}
{{ u.type }}
{{ u.scale }}
{{ u.offset }}
{{ u.aliases }}
MeasurementParser
Pure Ruby компонент: строка источника → amount + unit_id → канонизация. Значение считается в BigDecimal, Float запрещён.
{{ s.label }}
{{ p.k }} {{ p.v }}
{{ c.label }}
{{ typeCount }}
ProductTypeSchemaVersion · {{ ptCur }}
PUBLISHED-версия immutable. Публикация не запускает re-resolution.
Опубликовать v2
{{ v.v }}
{{ v.status }}
{{ v.at }}
{{ v.by }}
ProductTypeRevalidationRun
run
{{ r.id }}
запущен
{{ r.at }}
scope
{{ r.scope }}
товаров
{{ r.products }}
батчи
{{ r.batches }}
результат
{{ r.done }}
{{ bindingCount }}
Binding
required
critical
scope
inheritance
resolution_policy
constraints
{{ b.name }}
{{ b.code }}
{{ b.req }}
{{ b.crit }}
{{ b.scope }}
{{ b.inh }}
{{ b.policy }}
{{ b.constraints }}
taxonomy · INTERNAL_MAIN
{{ catCount }}
Category ≠ ProductType
Категория отвечает только за классификацию и не владеет атрибутами. Схему определяет ProductType, поэтому перенос товара между категориями не меняет ни набор атрибутов, ни Golden-значения.
product_classifications
· product_id
· category_id
· is_primary
CardLayout {{ layName }} {{ layBind }} {{ layMeta }}
group_code · {{ g.g }}
{{ i.name }}
{{ i.code }}
{{ o.label }}
{{ i.hidden }}
ProductCard · projection
{{ previewName }}
GoldenProduct + CardLayout + locale ru
{{ g.g }}
{{ i.name }} {{ i.disp }}
Display precision меняет только проекцию: master-значение остаётся в канонической единице с полной точностью.
{{ k.k }}
{{ k.v }}
{{ k.s }}
issue_type
Товар
Атрибут
Причина
Действие
{{ i.sev }} {{ i.type }}
{{ i.product }}
{{ i.attr }}
{{ i.code }}
{{ i.d }}
Разобрать →
{{ s.label }}
{{ mapMeta }}
source_field
Пример raw
attribute_definition
Обработка
confidence
Статус
{{ m.field }}
{{ m.sample }}
{{ m.attr }}
{{ m.parser }}
{{ m.conf }}
{{ m.status }}
Маппинг завершается attribute_definition_id, а не названием атрибута. Несопоставленные поля остаются в raw_payload SourceRecord и не создают Claim.
ResolutionPolicy
{{ polCur.code }}
{{ polCur.vt }}
версия
{{ polCur.version }}
bindings
{{ polCur.bindings }}
владелец
{{ polCur.owner }}
Правила выбора
{{ r.i }} {{ r.t }}
История версий
{{ h.v }} {{ h.at }} {{ h.what }}
Изменение policy — единственный законный повод для re-resolution
Публикация схемы re-resolution не запускает. Пересчёт значений идёт только через explicit ResolutionRebuildRun батчами по 10k товаров, и сохраняются только фактически изменившиеся значения.
Запустить пересборку
Качество по источникам
Источник
claims
выбрано как golden
ср. confidence
дедуп
расхождения
{{ s.name }}
{{ s.claims }}
{{ s.win }}
{{ s.conf }}
{{ s.dedup }}
{{ s.dis }}
Готовность по типам товаров
ProductType
товаров
ср. completeness
конфликты
schema
{{ t.name }}
{{ t.code }}
{{ t.products }}
{{ t.pct }}
{{ t.conflicts }}
{{ t.schema }}
{{ s.name }}
{{ s.id }}
{{ s.type }}
authority
{{ s.auth }}
records
{{ s.records }}
claims
{{ s.claims }}
last
{{ s.last }}
Import runs
Дедупликация по (source_id, fingerprint): одинаковый Claim не создаётся повторно.
Повторить импорт «ТехноОпт»
run
Источник
Дата
records
new claims
dedup hits
decisions
golden++
{{ r.id }}
{{ r.src }}
{{ r.date }}
{{ r.recs }}
{{ r.nw }}
{{ r.dedup }}
{{ r.dec }}
{{ r.gv }}
{{ r.note }}
{{ toastTitle }}
{{ toastBody }}