feat: align 3D digital twin with OZON Track 3 requirements

This commit is contained in:
root
2026-07-04 12:39:57 +02:00
parent b749cef14e
commit e0a655db4f
28 changed files with 28886 additions and 92 deletions

View File

@@ -14,7 +14,7 @@ export const OZON_CRITERIA: OzonCriterion[] = [
title: 'Classification rules: dimensions, roundness, priority',
status: 'covered',
evidence: 'ClassificationPanel shows thresholds, actual values, PASS/FAIL and C priority.',
relatedScenarioIds: ['oversized_item', 'round_object', 'boundary_dimensions'],
relatedScenarioIds: ['oversized_item', 'round_object', 'c_priority', 'boundary_dimensions'],
relatedDoc: 'docs/ARCHITECTURE.md',
},
{

View File

@@ -49,10 +49,23 @@ export const DEMO_STEPS: DemoStep[] = [
relatedCriteria: ['classification-rules', 'geometry-variety', 'physical-routing'],
presenterPhrase: 'The dimensions fit, but roundness is high, so the system sends it to D for do-upakovka.',
},
{
id: 'c-priority-oversized-round',
title: 'C priority oversized + round',
scenarioId: 'c_priority',
preferredAction: 'step',
focusArea: 'classification',
explanation: 'Item is both oversized and round; dimensions are checked first so category is C, not D.',
whatToWatch: 'DIM FAIL, K high, category C, ROUTE_TO_C active, route D inactive.',
juryValue: 'Proves C-priority rule for Track 3.',
relatedCriteria: ['classification-rules', 'boundary-cases', 'physical-routing'],
presenterPhrase: 'Even though the item is round, dimensions fail first, so we route only to C.',
},
{
id: 'boundary-dimensions',
title: 'Boundary dimensions',
scenarioId: 'boundary_dimensions',
preferredAction: 'step',
focusArea: 'classification',
explanation: 'Items at the edge of the allowed envelope prove the rule implementation is stable.',

View File

@@ -91,6 +91,15 @@ export const ITEMS: Item[] = [
shape: 'boundary box',
expectedCategory: 'B',
},
{
id: 'SKU-011',
name: 'Oversized round 500x300x300',
dimensionsMm: { width: 500, depth: 300, height: 300 },
roundness: 0.93,
confidence: 0.88,
shape: 'oversized round cylinder',
expectedCategory: 'C',
},
];
export function getItem(id: string): Item {

View File

@@ -6,6 +6,7 @@ const expectedIds: ScenarioId[] = [
'normal_flow',
'oversized_item',
'round_object',
'c_priority',
'boundary_dimensions',
'close_items',
'low_confidence',

View File

@@ -29,6 +29,15 @@ export const SCENARIOS: Scenario[] = [
demonstrates: 'Rule-based shape issue routing без реального ML на MVP-этапе.',
items: ['SKU-006', 'SKU-007', 'SKU-008'].map(getItem),
},
{
id: 'c_priority',
name: 'C priority (oversized + round)',
description: 'Товар одновременно негабаритный и круглый — приоритет габаритов, маршрут только в C.',
goal: 'Доказать, что dimensions check идёт раньше roundness: категория C, не D.',
expectedCategorySummary: 'C only (D not activated)',
demonstrates: 'C-priority: oversized + round → ROUTE_TO_C, route D остаётся неактивным.',
items: ['SKU-011'].map(getItem),
},
{
id: 'boundary_dimensions',
name: 'Boundary dimensions',