mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 16:24:50 +00:00
remove duplicate vent question + AI must propose charcoal filter on recirc hood
USER REPORT: 'после прогона всей техники, перед запросом опять вопрос про фильтр для вытяжки в конце'
ROOT CAUSE: Infra-шаг спрашивает 'Вытяжка → вентшахта?', хотя у hood-категории уже есть шаг 'Подключение' с вариантами Отвод/Рециркуляция/Универсальная. Это дубликат.
FIX:
- renderInfra: убран блок vent. Шаг показывается только если выбрана варочная.
- Auto-skip infra если нет hob (раньше требовался hob ИЛИ hood, теперь только hob)
- renderSummary: убрана строка 'Вентиляция'
- summaryBack: 'infra' только если cats.includes('hob')
AI PROMPT:
- Новый блок: режим вытяжки читать из per_cat.hood.answers.mode
- exhaust → обычная установка
- recirc → ОБЯЗАТЕЛЬНО упомянуть 'Угольный фильтр в комплекте/докупаем' в pros
+ в первой строке pros указать 'для квартир без вентшахты'
- combi → упомянуть универсальность
- 'Если recirc и фильтр не предложен — это ОШИБКА'
Cache: v=20260512b
This commit is contained in:
parent
c4f3016b56
commit
43c43af795
@ -103,8 +103,14 @@ SYSTEM_PROMPT_PICKER = (
|
||||
" - 'cheap' → надёжный минимум по цене\n"
|
||||
" - 'tech' → топ функционал (Wi-Fi, инвертор, пар, авто-программы)\n"
|
||||
" - 'style' → согласованный дизайн всей техники\n"
|
||||
"4. **Инфраструктура**:\n"
|
||||
" - газ исключает индукцию; нет вентиляции → только рециркуляция (угольный фильтр)\n"
|
||||
"4. **Инфраструктура и режим вытяжки**:\n"
|
||||
" - `checklist.infra.stove` (газ/электро/индукция) — газ исключает индукцию\n"
|
||||
" - У ВЫТЯЖКИ режим живёт в `per_cat.hood.answers.mode`:\n"
|
||||
" • `exhaust` (Отвод в вентшахту) → стандартная установка, без фильтра\n"
|
||||
" • `recirc` (Рециркуляция) → **ОБЯЗАТЕЛЬНО в pros модели вытяжки укажи 'Угольный фильтр в комплекте/докупаем'**\n"
|
||||
" и в первой строке pros указать что комплект подходит для квартир без вентшахты\n"
|
||||
" • `combi` (Универсальная) → упомяни что подходит для обоих режимов\n"
|
||||
" - Если у hood режим recirc и AI не предлагает угольный фильтр — это ОШИБКА\n"
|
||||
"5. **Фичи современной техники** (NoFrost, Inverter, Wi-Fi, AquaStop, Booster и т.п.):\n"
|
||||
" - Пользователь НЕ выбирает фичи — у современной техники они в основном одинаковые (95% моделей имеют base set)\n"
|
||||
" - Ты УПОМИНАЕШЬ важные фичи каждой модели в `highlights` и в `pros` БЕЗ акцента на них\n"
|
||||
|
||||
@ -1115,11 +1115,11 @@ const Podbor = (function () {
|
||||
function renderInfra() {
|
||||
const cats = state.categories || [];
|
||||
const askStove = cats.includes("hob");
|
||||
const askVent = cats.includes("hood");
|
||||
// Вытяжка НЕ спрашиваем здесь — у hood-категории уже есть шаг "Подключение"
|
||||
// (Отвод в вентшахту / Рециркуляция / Универсальная) — это дубль.
|
||||
|
||||
// Если ни одна из релевантных категорий не выбрана — пропускаем шаг
|
||||
if (!askStove && !askVent) {
|
||||
// Автопереход на summary через микропаузу (чтобы пользователь увидел)
|
||||
// Если варочная не выбрана — пропускаем шаг полностью
|
||||
if (!askStove) {
|
||||
setTimeout(() => { go("summary"); }, 50);
|
||||
return el(`
|
||||
<section class="podbor-step">
|
||||
@ -1130,7 +1130,10 @@ const Podbor = (function () {
|
||||
`);
|
||||
}
|
||||
|
||||
const stoveBlock = askStove ? `
|
||||
const node = el(`
|
||||
<section class="podbor-step">
|
||||
<h2 class="display-title">Инфраструктура<br><span class="accent">кухни</span></h2>
|
||||
<p class="lede">Газ или электрика — определит тип варочной (индукция требует 380В, обычная электро 220В).</p>
|
||||
<div class="block">
|
||||
<div class="block-head">Подключение варочной</div>
|
||||
<div class="opt-list">
|
||||
@ -1139,32 +1142,6 @@ const Podbor = (function () {
|
||||
`).join("")}
|
||||
</div>
|
||||
</div>
|
||||
` : "";
|
||||
|
||||
const ventBlock = askVent ? `
|
||||
<div class="block">
|
||||
<div class="block-head">Вытяжка → внутридомовая вентиляция?</div>
|
||||
<div class="opt-list">
|
||||
${PODBOR_INFRA.vent.map(o => `
|
||||
<button class="opt${state.infra.vent === o.key ? " on" : ""}" data-infra="vent" data-val="${o.key}">${o.label}</button>
|
||||
`).join("")}
|
||||
</div>
|
||||
<div class="hint">Если «Нет» — менеджер закладывает угольный фильтр. Если «Да» — заранее планируем выводы.</div>
|
||||
</div>
|
||||
` : "";
|
||||
|
||||
const lede = (askStove && askVent)
|
||||
? "Газ или электрика — определит тип варочной. Подключение вытяжки — нужны ли выводы или угольный фильтр."
|
||||
: askStove
|
||||
? "Газ или электрика — определит тип варочной (индукция / стеклокерамика / газ)."
|
||||
: "Подключение вытяжки — нужны ли выводы в вентшахту или угольный фильтр.";
|
||||
|
||||
const node = el(`
|
||||
<section class="podbor-step">
|
||||
<h2 class="display-title">Инфраструктура<br><span class="accent">кухни</span></h2>
|
||||
<p class="lede">${lede}</p>
|
||||
${stoveBlock}
|
||||
${ventBlock}
|
||||
<div class="podbor-cta-row">
|
||||
<button class="btn-secondary" data-go="strategy">Назад</button>
|
||||
<button class="btn-primary" data-go="summary">Дальше</button>
|
||||
@ -1228,7 +1205,6 @@ const Podbor = (function () {
|
||||
<div class="kv"><span>Бюджет</span><strong>${budgetLabel}</strong></div>
|
||||
<div class="kv"><span>Стратегия</span><strong>${strategyLabels || "—"}</strong></div>
|
||||
${state.categories.includes("hob") ? `<div class="kv"><span>Подключение</span><strong>${PODBOR_INFRA.stove.find(f => f.key === state.infra.stove)?.label || "—"}</strong></div>` : ""}
|
||||
${state.categories.includes("hood") ? `<div class="kv"><span>Вентиляция</span><strong>${PODBOR_INFRA.vent.find(f => f.key === state.infra.vent)?.label || "—"}</strong></div>` : ""}
|
||||
</div>
|
||||
|
||||
<label class="field">
|
||||
@ -1249,7 +1225,9 @@ const Podbor = (function () {
|
||||
// Кнопка "Назад" — обходим infra если она авто-пропускается
|
||||
node.querySelector("#summaryBack").addEventListener("click", () => {
|
||||
const cats = state.categories || [];
|
||||
const goTo = (cats.includes("hob") || cats.includes("hood")) ? "infra" : "strategy";
|
||||
// Infra-шаг показывается только если выбрана варочная (для электро/газ).
|
||||
// Вытяжка задаёт свою вентиляцию в hood-step "Подключение".
|
||||
const goTo = cats.includes("hob") ? "infra" : "strategy";
|
||||
go(goTo);
|
||||
});
|
||||
node.querySelector("#submitBtn").addEventListener("click", () => onSubmit(node));
|
||||
|
||||
@ -12,8 +12,8 @@
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Geist:wght@400;500;600&family=Newsreader:ital,wght@0,400..600;1,400..600&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap">
|
||||
<script src="https://telegram.org/js/telegram-web-app.js"></script>
|
||||
<link rel="stylesheet" href="assets/styles.css?v=20260512a">
|
||||
<link rel="stylesheet" href="assets/podbor.css?v=20260512a">
|
||||
<link rel="stylesheet" href="assets/styles.css?v=20260512b">
|
||||
<link rel="stylesheet" href="assets/podbor.css?v=20260512b">
|
||||
</head>
|
||||
<body>
|
||||
<main id="app">
|
||||
@ -21,11 +21,11 @@
|
||||
<div class="spinner"></div>
|
||||
</div>
|
||||
</main>
|
||||
<script src="assets/icons.js?v=20260512a"></script>
|
||||
<script src="assets/podbor.config.js?v=20260512a"></script>
|
||||
<script src="assets/podbor.picts.js?v=20260512a"></script>
|
||||
<script src="assets/podbor.js?v=20260512a"></script>
|
||||
<script src="assets/clients.js?v=20260512a"></script>
|
||||
<script src="assets/app.js?v=20260512a"></script>
|
||||
<script src="assets/icons.js?v=20260512b"></script>
|
||||
<script src="assets/podbor.config.js?v=20260512b"></script>
|
||||
<script src="assets/podbor.picts.js?v=20260512b"></script>
|
||||
<script src="assets/podbor.js?v=20260512b"></script>
|
||||
<script src="assets/clients.js?v=20260512b"></script>
|
||||
<script src="assets/app.js?v=20260512b"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user