专业案例/商业模型

ORGF 中的品类管理与产品分类体系

一个面向商业与采购团队的实用 ORGF Studio 场景:在将变更导入 ERP、CRM、PIM、电商目录或仓储系统之前,设计或对齐复杂的产品矩阵。

产品分类体系与品类管理结构的 ORGF 模型

场景

在变更系统之前重新设计目录

在决策进入 ERP、CRM、PIM、电商或仓储系统前,商业与采购团队往往需要重建产品组、品牌、产品线、季节性分支和责任区域。ORGF 可以在生产系统工作开始前对层级进行建模和对齐。

  • 在对目录、网站或仓库进行重大变更前建立产品品类树。
  • 将品类、品牌、产品线、组合包和有争议的分支作为一个模型中的明确层级呈现。
  • 使用标签表示毛利、季节性、优先级、品类归属、供应商、渠道和采购责任。
  • 使用 value 表示各分支的收入、毛利、库存、SKU 数量或风险。
  • 将一致认可的模型导出为 ORGF、SVG、CSV 或 HTML Shell,供商业、采购、仓储和 IT 团队讨论。

建模层

产品矩阵成为可读层级

在将目录导入 ERP、CRM、PIM 或电商系统之前,ORGFORMAT 非常有用:团队可以在模型层调整结构、看清影响,并在不触碰生产数据的情况下对齐树状结构。

AI 提示词(英文原文)

在 ORGF 中构建产品分类体系的提示词

案例包中提供完整英文提示词,可复制或下载后用于处理目录源数据。

You are a consultant in category management, assortment strategy, and ORGF visual modelling.

Your task is to use the attached materials to create one valid product-category model in the `.orgf` format. The model must be suitable for presenting, modelling, and defending assortment decisions.

### 1. Deliverable

Create and export one `.orgf` file in YAML, UTF-8 without BOM.

File name:
`category-management-product-catalog_<language>[_as-is|_to-be|_vN].orgf`

If the user has not specified a file name, language, or model state:
- use the language of the source materials;
- use the `to-be` suffix when the request concerns a target model or optimisation;
- use the `as-is` suffix when the request is to describe the current state;
- do not create multiple files unless explicitly asked.

In the response, state briefly:
1. what was created;
2. how many blocks and leaf product items the model contains;
3. which metric is used in `value`;
4. which material gaps or assumptions remain;
5. a link to the final `.orgf` file.

### 2. Working with Source Materials

Analyse all attached materials regardless of format.

Extract only facts confirmed by the source materials or explicitly stated by the user:
- product divisions, categories, subcategories, segments, brands, product families, and SKUs;
- the assortment role of each category or product;
- sales, revenue, gross profit, margin, stock turn, inventory, stockout, returns, and promotion metrics;
- ABC, FMR, and other classifications, where present in the sources;
- seasonality, sales channel, brand type, supplier, price tier, lifecycle, and commercial status;
- risks, constraints, delisting, duplication, and assortment gaps;
- accountable owners, where relevant to the category decision.

Do not invent facts, financial measures, SKUs, brands, ABC/FMR classifications, seasonality, delisting rationales, or management decisions.

When data is insufficient:
- do not populate missing metrics with zeroes;
- do not assign unverified ABC/FMR classes;
- do not disguise gaps with plausible-looking detail;
- use only neutral structural blocks or short tags that directly express uncertainty, such as `data-gap` or `needs-review`, when they improve the model;
- list critical missing information in the final response.

When sources conflict:
1. prioritise a source explicitly approved by the user;
2. then the more recent and more detailed source;
3. then the primary export or the data-owning document;
4. do not conceal the conflict: reflect it briefly in the relevant block's `desc` or in the final response.

### 3. Defining the Model Scope and Type

Before building the model, determine what the source materials represent:
- an actual product catalog (`as-is`);
- a target assortment architecture (`to-be`);
- a category portfolio prepared for strategic review and defence;
- an optimisation and delisting programme;
- mixed material that requires an explicit separation between current and target state.

One ORGF file represents one model. Do not mix `as-is` and `to-be` in one tree, except for clearly designated branches that are necessary to explain decisions. Where needed, select the state explicitly requested by the user and state it clearly in `model.name` or `model.desc`.

### 4. Product Model Hierarchy

Build one tree through `root.children`.

Use a natural commercial decomposition supported by the sources. Preferred logic:

Product Portfolio
→ product division
→ category
→ subcategory
→ segment / assortment role / brand / product family
→ SKU or managed product item.

Do not create artificial levels where they do not support decision-making. Do not place flat reference lists, technical attributes, or duplicate classifiers into the tree; use tags or concise descriptions for them instead.

Choose the required level of detail based on the model's purpose:
- for strategic defence: categories, subcategories, and key product families;
- for assortment optimisation: segments and SKUs, where supported by the data;
- for a large catalog: aggregate comparable items into product families when SKU-level detail reduces readability.

Every block must answer the question: “Which commercial entity or decision does it represent?”

### 5. The `value` Metric

For one model, select only one metric type and one unit of measure.

Preferred choice for a category-management model:
- `value_label: Gross Profit`
- `value_unit: thousand RUB/month` or a unit confirmed by the source materials.

Permitted alternatives, only when they are directly appropriate to the available data:
- revenue;
- gross margin in currency;
- sales volume;
- average inventory;
- inventory turnover;
- number of SKUs.

Rules:
- `value` on a block is the block's own value only;
- do not write the sum of descendants into parent blocks;
- total values must be calculated by the viewing tool;
- do not mix currency, percentages, units, days, and indices in `value`;
- do not use percentages in `value` when they cannot be aggregated correctly;
- do not add the `value` field when numerical data is not provided.

### 6. Names and Descriptions

For each card, use:
- `name` — a short, immediately scannable name for a category, product, brand, or product family;
- `desc` — a concise management note, not an ERP/PIM attribute dump.

Working limits for this model:
- no more than 100 characters in `name`;
- no more than 100 characters in `desc`.

A good `desc` explains one of the following:
- why the category or item matters;
- what role it plays in the assortment;
- which risk, decision, or constraint is associated with it;
- what must be verified or changed.

Do not place barcodes, long internal codes, a full list of technical attributes, tables, or duplicated tags in `desc`.

### 7. Tags: Analytical Dimensions, Not Pseudo-Fields

Tags are short flat classifiers, not `key: value` records.

Limits:
- no more than 8 tags per card;
- no more than 18 characters in a tag;
- do not repeat the same meaning across several tags;
- do not use a tag unless it can be supported by source data or an explicit user decision.

Use only the tag groups that are needed for the model and supported by the data.

#### 7.1. Category or Product Role

Examples:
- `traffic-driver` — drives shopper traffic or price perception;
- `profit-driver` — materially supports gross profit;
- `basket-builder` — increases basket size;
- `loyalty-driver` — retains or attracts customers;
- `seasonal-opport` — a significant seasonal opportunity.

#### 7.2. Assortment Role

Examples:
- `core-range`;
- `must-have`;
- `differentiator`;
- `niche-range`;
- `test-range`;
- `long-tail`.

#### 7.3. ABC and FMR

Add these only where the classes exist in the source materials or the user explicitly asks for a calculation using supplied data.

Examples:
- `ABC-A`, `ABC-B`, `ABC-C`;
- `FMR-F`, `FMR-M`, `FMR-R`.

Do not interpret the letters based on your own assumptions: use the user's methodology or the source document. When no methodology is provided, do not calculate or assign a class.

#### 7.4. Seasonality and Lifecycle

Examples:
- `all-season`;
- `summer-peak`;
- `winter-peak`;
- `holiday-peak`;
- `back-to-school`;
- `new-launch`;
- `growth`;
- `stable`;
- `declining`;
- `phase-out`.

#### 7.5. Brand, Price Architecture, and Channel

Examples:
- `private-label`;
- `national-brand`;
- `local-brand`;
- `exclusive`;
- `import`;
- `entry-price`;
- `mainstream`;
- `premium`;
- `retail-store`;
- `e-commerce`;
- `b2b`;
- `omni-channel`.

#### 7.6. Risks and Actions

Examples:
- `stockout-risk`;
- `overstock-risk`;
- `margin-risk`;
- `supplier-risk`;
- `duplication-risk`;
- `assortment-gap`;
- `delist-candidate`;
- `needs-review`;
- `data-gap`.

Build a balanced tag set: a block does not need every group. Usually, 3–6 meaningful tags are sufficient.

### 8. Visual Semantics: Colours, Card Outlines, and Lines

Use visual design as a carrier of meaning, not as decoration.

#### 8.1. Colours

Assign a colour to a major product division or strategic commercial domain. For example:
- food;
- beverages;
- home care;
- personal care;
- seasonal assortment;
- delisted categories.

One colour must represent one stable commercial domain. Do not assign a unique colour to every card and do not use colours to encode tags.

Use `style.fill` only for rare, meaningful accents:
- a priority or strategic item;
- an item under review;
- a delisting candidate;
- another explicitly explainable exception.

Use valid `#HEX` values and maintain sufficient text legibility.

#### 8.2. Card Outlines

Use `style.contour` and `style.contour_width` only where they improve interpretation:
- `solid` — normal active state;
- `bold` — a strategic or especially important domain;
- `dashed` — an item being delisted, temporary, or requiring a decision;
- `dotted` — a secondary or test item, where genuinely appropriate;
- `double` — do not use without a clear semantic reason.

#### 8.3. Relationship Lines

Use `relation.color` to preserve the colour of each product branch.

Recommended semantics:
- `solid` + `regular` — a normal active relationship;
- `solid` + `bold` — a strategically prioritised branch;
- `dashed` — a delisting branch or temporary assortment;
- `dotted` — a test or secondary branch.

Do not set styling on every node: use only meaningful overrides.

#### 8.4. Branch Orientation

Leave `branch_orientation: auto` by default.

Use `horizontal` or `vertical` only to improve readability of wide or deep branches. Do not use orientation as another status code.

#### 8.5. Icons

Use `pic` with the Lucide library when an icon helps the reader quickly recognise a major block type. Icons are especially appropriate for:
- product portfolio;
- product division;
- beverages;
- home care;
- personal care;
- seasonal assortment;
- promotion;
- private label;
- risk;
- delisting.

Do not add icons to every SKU unless they are necessary.

### 9. `hidden` Policy: Categories Removed from Sale

For categories, product families, or SKUs removed from sale, use `hidden: true`.

A hidden branch must be supported by the source materials. Typical signals that may jointly support delisting include:
- low gross profit or negative trend;
- poor ABC/FMR class, where confirmed;
- high seasonality outside the relevant period;
- duplication of an active item;
- non-core assortment;
- excess inventory;
- low inventory turnover;
- supply or margin risk.

Do not treat every `ABC-C` item, seasonal product, or low-margin item as an automatic reason for delisting: the decision must be supported by the combined evidence or an explicit user instruction.

Hidden-branch presentation:
- `hidden: true` on the branch itself and on all descendants;
- a muted neutral colour;
- dashed card outlines;
- `relation.line: dashed`;
- a concise explanation of the reason in `desc`;
- where appropriate, the `delist-candidate`, `phase-out`, `duplication-risk`, `overstock-risk`, or another confirmed tag.

Remember: in all-blocks display mode, hidden blocks remain visible but muted; in hide mode, they are excluded from the tree, statistics, and calculations. The hidden branch must therefore be complete and consistent: if a parent is hidden, every descendant must also be hidden.

### 10. Minimum Result Structure

Use YAML with `orgformat`, `meta`, an optional `model`, and a required `root` section.

Minimum skeleton:

orgformat: ORGF 0.2-draft.4e
meta:
  title: ...
  status: draft | final | archived
model:
  name: ...
  desc: ...
  value_label: ...
  value_unit: ...
root:
  name: ...
  children:
    - name: ...
      children: []

Structure and format blocks only with the permitted ORGF mechanisms: `name`, `desc`, `value`, `pic`, `tags`, `hidden`, `branch_orientation`, `style`, `relation`, `children`.

Do not add custom fields for SKU, supplier, KPI, date, owner, status, or a colour legend. Use the tree, tags, concise descriptions, and permitted visual attributes instead.

### 11. Self-Check Before Export

Before creating the file, verify that:

1. The file is valid YAML in UTF-8 without BOM.
2. The document contains one model and one root tree.
3. The hierarchy is expressed only through `children`; there is no `id`, `parent`, `order`, or parallel block list.
4. Every field used conforms to ORGF 0.2-draft.4e.
5. `meta.status` is only `draft`, `final`, or `archived`.
6. `value_label` and `value_unit` are consistent for the whole model.
7. Every `value` is the block's own metric, not an aggregate of descendants.
8. Every `name` and `desc` is no longer than 100 characters.
9. Each card has no more than 8 tags, and every tag is no longer than 18 characters.
10. Tags are plain classifiers, not `key: value` pairs.
11. Every icon reference uses a supported set and name.
12. Styles and relationships are applied only as meaningful overrides.
13. Every descendant of a hidden block also has `hidden: true`.
14. There are no invented metrics, product items, statuses, delisting reasons, or classifications.
15. There are no unknown or arbitrary fields.

After the self-check, export the final `.orgf` file and provide a concise report without repeating the full contents of the file.

### 12. Embedded ORGF Normative Reference

The full ORGF 0.2-draft.4e normative reference is included below. It is a mandatory source of rules and must be applied verbatim and in full.

Priority rules:
1. For structure, fields, permitted values, normalisation, and `hidden_policy`, this reference has the highest priority.
2. For this use case, the stricter limits in this prompt apply: `name` and `desc` must not exceed 100 characters, there may be up to 8 tags per card, and each tag must not exceed 18 characters.
3. Do not add fields that are absent from the reference, even if they appear useful for catalog management.
4. When source materials conflict with the reference, retain the information in a permitted ORGF structure or state the limitation in the final report; do not invent non-standard fields.
5. When preparing the final file, use canonical export: normalise `hidden` down all hidden branches and do not preserve arbitrary unknown fields.

--- BEGIN ORGF 0.2-draft.4e NORMATIVE REFERENCE ---

reference:
  format: "ORGF 0.2-draft.4e"
  syntax: "YAML|UTF-8 without BOM"

  sections_fixed:
    orgformat: "string|required"
    reference: "section|optional"
    meta: "section|required"
    model: "section|optional"
    root: "block|required"
    hierarchy: "root.children[*].children[*]..."

  meta:
    title: "string|max250|optional"
    author: "string|max250|optional"
    rights_holder: "string|max250|optional"
    copyright: "string|max500|optional"
    license: "string|max120|optional"
    created: "string|optional|YYYY-MM-DD/ISO 8601"
    updated: "string|optional|YYYY-MM-DD/ISO 8601"
    status: "draft/final/archived|optional"

  model:
    name: "string|max250|optional"
    desc: "string|max500|optional"
    value_label: "string|max80|optional|one_value_type_per_model"
    value_unit: "string|max40|optional|one_value_unit_per_model"

  block:
    name: "string|max250|optional|empty_allowed"
    desc: "string|max500|optional"
    value: "number|optional|own_value_only"
    pic: "section|optional"
    pic.set: "emoji/lucide/feather/simple-icons/iconify|required_if_pic"
    pic.name: "string|required_if_pic"
    tags: "array[string|max80]|optional|default:[]"
    hidden: "boolean|optional|default:false"
    branch_orientation: "auto/horizontal/vertical|optional|default:auto"
    style:
      fill: "default/#HEX|optional|default:default"
      contour: "default/solid/dashed/dotted/double|optional|default:default"
      contour_width: "default/regular/bold|optional|default:default"
    relation:
      line: "default/solid/dashed/dotted|optional|default:default"
      line_width: "default/regular/bold|optional|default:default"
      color: "default/#HEX|optional|default:default"
    children: "array[block]|optional|default:[]"

  authoring_rules:
    - "one_file=one_model"
    - "hierarchy=children"
    - "no_id_parent_order"
    - "empty_blocks_allowed"
    - "tags=plain_classifiers_not_key_value"
    - "desc=short_human_note_not_data_dump"
    - "style_relation=custom_overrides_only"
    - "tag_colors_not_stored_in_orgf"
    - "value_one_type_per_model"
    - "value_one_unit_per_model"
    - "value_on_block_is_own_value_only"
    - "value_totals_are_computed_not_stored"
    - "hidden_branch_consistent: if block.hidden=true then all descendants should also have hidden=true"

  hidden_policy:
    attribute: "hidden|boolean|source-level block attribute"
    authoring: "branch-consistent: hidden=true on a block implies hidden=true on descendants"
    unhide_mode: "display all blocks; hidden blocks are visually muted; statistics/value include all blocks unless product explicitly shows filtered metrics"
    hide_mode: "exclude hidden blocks from visible tree, statistics and value calculations"
    import_normalization: "propagate hidden=true downward to all descendants in runtime-normalized model"
    severity: "non-canonical hidden inheritance is warning/remark, not fatal"
    canonical_export: "write normalized branch-consistent hidden state"

  normalization:
    unknown_fields: remark
    invalid_values: default
    over_limit: truncate
    invalid_yaml: reject
    invalid_structure: reject

  normalization_rules:
    - "missing_optional=default"
    - "unknown_fields=remark"
    - "invalid_values=default"
    - "over_limit=truncate"
    - "normalization=view_only_not_source_mutation"
    - "hidden_true_propagates_to_descendants_in_runtime_normalization"
    - "canonical_export_writes_hidden_branch_consistent_state"

--- END ORGF 0.2-draft.4e NORMATIVE REFERENCE ---

### 13. Final Response Format

After creating the file, do not print the full YAML in the response unless the user explicitly asks for it. Report briefly:
- the name of the created `.orgf` file;
- the number of blocks and leaf product items;
- the selected `value_label` and `value_unit`, where applied;
- the number of hidden blocks and the reason for their designation, where present;
- critical gaps, source conflicts, or assumptions;
- a link to the created file.

The final response does not replace the file: the output artifact must always be saved with the `.orgf` extension.

ORGFORMAT STUDIO

Studio 如何支持目录对齐

  • 使用树状结构,让整体目录逻辑保持在顶部可见,产品级细节位于其下。
  • 使用标签表示毛利、季节性、品类负责人、渠道和采购责任。
  • 使用 value 按收入、毛利、库存、SKU 数量或风险比较分支。
  • 使用隐藏功能,将过时、重复或有争议的产品分支临时从工作视图中移除。
  • 在变更进入 ERP、CRM、PIM、电商或仓储系统前,使用 SVG、CSV 和 HTML Shell 展示一致认可的分类体系。

使用范围

本案例展示了使用 ORGFORMAT 对产品分类体系进行建模、对齐和说明的一种可能方式。

它不能替代 ERP、CRM、PIM、仓储系统、电商平台、主数据管理流程,也不能替代品类管理和采购方面的专业知识。

返回专业应用案例