Repository navigation
fix(procurement): не выдавать умолчание WooCommerce за наличие - #847
Merged
Merged
Conversation
Ассистент отвечал «✅ В наличии» про любую позицию каталога. Проверка живого WooCommerce: у всех 30 163 товаров manage_stock=false, stock_quantity=null, а stock_status="instock" стоит по умолчанию. То есть наличие никто не ведёт, а бот его утверждал — ровно то, что запрещено §5.5 и §44.12 MASTER WORKFLOW («прайс не является подтверждением наличия»). - site_adapter._stock(): False при outofstock/onbackorder, True только когда учёт включён и остаток положительный, иначе None — неизвестно - в блоке позиций: «в наличии» / «НЕТ в наличии» / «наличие уточняется» - инструкция ассистенту: позицию без наличия так и назвать и сразу предложить из того же списка технически подходящую замену (близкий номинал, то же напряжение и тип контактов), прямо сказав, что это замена и чем она отличается Заодно поиск перестал поднимать 57 808 ORM-объектов на каждое сообщение: ранжирование идёт по лёгким Core-кортежам, полные строки достаются второй фазой только для попавших в выдачу. Замер на проде: полная ORM-выборка 1,51 с против 0,81 с у Core тех же колонок и 0,28 с у трёх. Внимание: у поставщиков остатки настоящие (3 548 в наличии, 20 738 нет), их отображение не меняется. Данные по сайту станут честными после ближайшего procurement-site-sync. ## NEWS 📦 **Ассистент больше не обещает наличие, которого не знает** Раньше про любой товар с сайта он писал «в наличии» — хотя учёт остатков в каталоге не ведётся. Теперь честно пишет «наличие уточняется», а если товара точно нет — говорит об этом и сразу предлагает технически подходящую замену. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
6 of 7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Пункт 4 заказчика: «если у товара есть цена, но нет в наличии — бот должен говорить, что товара нет, и предлагать технически подходящую замену».
Проверил живой WooCommerce — оказалось хуже, чем предполагалось:
У всех 30 163 товаров
manage_stock: falseиstock_quantity: null, аstock_statusравенinstockпросто по умолчанию. Учёт остатков в каталоге не ведётся вообще, а адаптер писалin_stock = (stock_status == "instock")→Trueдля всего. Ассистент на этом основании отвечал клиенту «✅ В наличии» про любую позицию — то есть утверждал то, чего не знает. Это прямо запрещено §5.5 и §44.12 MASTER WORKFLOW: «прайс не является подтверждением наличия».Что сделано
site_adapter._stock():Falseприoutofstock/onbackorder,Trueтолько когда учёт включён и остаток положительный, иначеNone— неизвестноРанжирование по номиналу (#843) для подбора замены уже работает — ближайшие по току позиции и так попадают в список.
Заодно: поиск стал быстрее
Ранжирование шло по полным ORM-объектам — 57 808 штук на каждое сообщение чата. Теперь скоринг по лёгким Core-кортежам, полные строки достаются второй фазой только для попавших в выдачу. Замер на проде:
Важно
procurement-site-sync(ежедневно 23:30 UTC) или ручногоPOST /admin/procurement/sync.docs/stalker-workflow-plan.md(витрина сайта против кабинета остатков). Пока источника нет, максимум честного ответа — «наличие уточняется».NEWS
📦 Ассистент больше не обещает наличие, которого не знает
Раньше про любой товар с сайта он писал «в наличии» — хотя учёт остатков в каталоге не ведётся. Теперь честно пишет «наличие уточняется», а если товара точно нет — говорит об этом и сразу предлагает технически подходящую замену.
Test plan
tests/unit/test_site_stock_mapping.py— 6 кейсов маппинга наличияpytest tests/unit— 314 passed (те же 3 падения и 2 ошибки, что и на чистом дереве)ruff check+format— чистоPOST /admin/procurement/sync, затем проверить, что в блоке позиций стоит «наличие уточняется»🤖 Generated with Claude Code