Go to file
wasrusgen 4612c3a4e4 fix: карточка клиента — данные, редактирование, удаление по правилам
Bug 1: «Завожу клиента и не вижу данных»
Причина: 3 эндпоинта проверяли user.get('role') == 'manager' напрямую,
вместо sheets.has_role(user, 'manager'). У админа теперь multi-role
(manager,measurer,assembler) → проверка падала с only_manager,
/api/measurements возвращало ошибку → таймлайн/файлы пустые.

Backend fixes:
- _handle_measurements_list: has_role + initDataUnsafe fallback + фильтр archived_at + возвращает client_name, client_phone, address, scheduled_at, client_no, contract_no, contract_date, assigned_to_tg_id
- _handle_measurement_request: has_role вместо ==
- _handle_measurement_detail: has_role + поддержка assigned_to_tg_id для мастера
- _handle_clients: возвращает address, contract_date, measurements_count, in_work
  in_work=True если: есть лиды ∨ есть не-draft замер ∨ есть сборка

Bug 2: «Не могу удалить клиента»
Причина: была спрятана в expand «Опасная зона» внизу страницы.

Новая логика прав (по запросу):
- Клиент не в работе → ✏️ Редактировать + 🗑 Удалить
- Клиент в работе → только ✏️ Редактировать
- Бэкенд тоже enforce: client_delete отвечает {error: 'in_work'}
  если есть лиды/сборки/не-draft замеры

Новые эндпоинты:
- POST /api/client_update — обновляет имя/телефон/адрес/договор
  во всех Measurements этого клиента. Возвращает обновлённый client_key
  если имя изменилось

Frontend:
- Секция «⚙️ Управление карточкой» вместо «Опасной зоны»
- Кнопка ✏️ Редактировать всегда видна, 🗑 Удалить только если !in_work
- renderEditClient — форма редактирования (имя, тел, адрес, договор № + дата)
- В шапке карточки теперь видны адрес и (если не в работе) бейдж «ещё не в работе»
- Draft-карточки скрыты из таймлайна (это техническая строка, не событие)

index.html: cache bump v=20260514d
2026-05-14 11:42:27 +03:00
.github/workflows ci: re-trigger Pages deploy after enabling 2026-05-09 01:11:54 +03:00
backend feat(backend): switch AI provider from Anthropic to GigaChat (Sber) — OAuth token caching, callAI dispatch 2026-05-10 14:22:53 +03:00
backend-py fix: карточка клиента — данные, редактирование, удаление по правилам 2026-05-14 11:42:27 +03:00
bot bot: CRM на меню-кнопке + новый текст приветствия 2026-05-13 22:44:49 +03:00
deploy measurements: photo upload + measurement detail page + PDF/print 2026-05-12 18:11:29 +03:00
design-drafts miniapp: hierarchical wizard for fridge category (style D pictograms) 2026-05-10 23:57:03 +03:00
docs fix client create — 7 багов + правило самопроверки 2026-05-14 00:09:14 +03:00
miniapp fix: карточка клиента — данные, редактирование, удаление по правилам 2026-05-14 11:42:27 +03:00
.gitignore gitignore: cat_refresh.json 2026-05-12 07:10:06 +03:00
.tmp_ssh.py miniapp: hierarchical wizard for fridge category (style D pictograms) 2026-05-10 23:57:03 +03:00
README.md chore: initial scaffold (bot, miniapp, backend, docs) 2026-05-08 23:56:48 +03:00

ZOV Tech — AI-подбор кухонной техники

Telegram-бот + MiniApp для подбора техники под кухню фабрики ЗОВ. Менеджер заполняет с клиентом чек-лист → нейросеть собирает предложение → менеджер получает результат за минуту.

Структура

zov-tech/
├── bot/         — Telegram-бот (Python + aiogram)
├── miniapp/     — MiniApp (HTML + JS, хост на GitHub Pages)
├── backend/     — Google Apps Script (бэкенд + работа с Sheets)
├── docs/        — Документация (ТЗ, deployment, decisions)
└── .claude/     — настройки Claude Code (вне репо)

Стек

Слой Технология
Бот Python 3.10+, aiogram 3.x
AI Anthropic Claude (Haiku 4.5)
MiniApp Vanilla JS + HTML, без сборки
Backend Google Apps Script (Web App)
БД Google Sheets (на старте), PostgreSQL (после роста)
Хостинг бота VPS (Selectel / Timeweb)
Хостинг MiniApp GitHub Pages

Быстрый старт (когда будет код)

cd bot
python -m venv .venv
.venv\Scripts\activate    # Windows
pip install -r requirements.txt
copy .env.example .env    # заполнить токены
python main.py

Документация

Контакты

Куратор / заказчик: Василий (@wasrusgen) Канал: @wasrusgen1