SANDBOX
Попробуйте API
Выдайте dev-ключ, откройте OpenAPI и выполните первый compute - THERMO с маршрутом или PLAIN без термо.
Подготовка
Создайте dev-ключ: pnpm --filter @avinex/thermo-box-picker-app apikey:create "dev" "packing:compute,packing:read"
Подставьте $BASE (localhost:3002 в dev или ваш tenant host) и $KEY (prefix.secret).
Откройте OpenAPI - канонические поля PackingPlanInput, не копируйте с памяти.
Режим THERMO
Маршрут Москва → Хабаровск, holdMode PLUS_2_8 (+2…+8). Термофильтр отработает до packing; без thermal map в prod - THERMAL_DATA_MISSING.
curl -sS -X POST "$BASE/api/v1/packing/compute" \
-H "X-Api-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "THERMO",
"originCity": "Москва",
"destinationCity": "Хабаровск",
"holdMode": "PLUS_2_8",
"items": [{ "l": 400, "w": 300, "h": 280, "weightKg": 12, "qty": 4 }]
}'Режим PLAIN
Сухая геометрия без маршрута и режима удержания. Подходит для проверки multi-container packing и loadStep.
curl -sS -X POST "$BASE/api/v1/packing/compute" \
-H "X-Api-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "PLAIN",
"items": [
{ "l": 600, "w": 400, "h": 350, "weightKg": 45, "qty": 2 },
{ "l": 300, "w": 250, "h": 200, "weightKg": 8, "qty": 6 }
]
}'