bober-bbq-bot/docs/OPEN_QUESTIONS.md
byrsapty ff232d1a0f Bilingual menu content + finish EN coverage across bot and Mini App
Two gaps in the earlier i18n scaffolding: the Mini App's UA/EN switcher
existed but most screens and all menu content stayed hardcoded Ukrainian.

Menu content (business data, not UI chrome):
- Category.name_en, Product.name_en/description_en (nullable, opt-in per
  item — untranslated items fall back to Ukrainian rather than showing
  blank). Editable from the existing category/product admin forms.
- Allergen labels (a small fixed EU-mandated set) get an English label
  directly in ALLERGENS, no DB column needed.
- /api/categories and /api/products take an optional ?locale= param (no
  session on these unauthenticated routes to read a stored preference from).

Full EN coverage for everything else:
- Every remaining webapp screen: MenuPage/ProductCard, CartItemRow (fixes a
  pre-existing gap in the "already translated" cart screen), OrdersPage,
  ContactsPage, ClosedScreen, BottomNav, AnnouncementPopup, plus app-level
  status/error text.
- Every reachable bot message: /menu, /contacts (including its
  locale-dependent reply-keyboard button, matched by text across all
  locales since the label itself varies), and the rating thank-you flow.
- Every customer-facing checkout/order error message (empty cart, closed,
  min order amount, payment/promo validation, cancel/pay errors) via
  locale params threaded through workhours.closed_message() and
  promo.validate_promo_code().

New: PATCH /api/me/locale persists an explicit in-app language choice back
to TelegramUser.locale (fire-and-forget from the webapp switcher), so it
also applies to the bot's own push notifications, not just the Mini App
session that made the choice.

Fixed a real bug caught while testing: product_form.html's allergen
checklist unpacked ALLERGENS values as 2-tuples, which broke (ValueError)
once they became 3-tuples (uk_label, emoji, en_label) — admin's "add
product" page 500'd until this was caught in browser testing.
2026-08-27 16:38:10 +03:00

5 KiB
Raw Blame History

Що потрібно узгодити із замовником (розділ 22 ТЗ)

Код повністю робочий на демо-даних, але для запуску в продакшн потрібні реальні дані замовника. Все нижче редагується або через .env, або через адмінку (/admin/settings), або через сідинг реального меню — коду чіпати не треба.

# Пункт ТЗ Де налаштовується Статус
1 Вартість доставки: фіксована / по зонах / від суми Адмінка → Налаштування: delivery_fee, free_delivery_threshold Реалізовано найпростіший варіант — фіксована сума + безкоштовно від порогу. Логіка по зонах (наприклад, за районом) потребує окремого узгодження формату адрес і не закладена.
2 Місто та зона доставки Наразі бот приймає будь-яке місто текстом, без валідації/обмеження зони Потребує рішення замовника
3 Адреса закладу для самовивозу Адмінка → Налаштування → address Заповнити
4 Телефон Bober BBQ Адмінка → Налаштування → phone Заповнити
5 Telegram-акаунт/група менеджера (fallback) .env → OWNER_IDS Заповнити
6 Окремий чат для доставки Адмінка → Налаштування → Chat ID — Доставка Заповнити (додати бота адміном у чат)
7 Окремий чат для самовивозу Адмінка → Налаштування → Chat ID — Самовивіз Заповнити (додати бота адміном у чат)
8 Реквізити ФОП / дані monobank .env → MONOBANK_TOKEN Без цього оплата карткою недоступна — бот коректно переключається на «оплата при отриманні» і просить менеджера зв'язатися з клієнтом, нічого не падає
9 Фінальний перелік категорій меню Адмінка → Категорії або bober_bbq/seed.py Зараз — демо-категорії (Шашлик, BBQ, Піца, Бургери, Гарніри, Закуски, Соуси, Напої)
10 Повний перелік товарів, цін, описів, фото Адмінка → Товари Зараз — по 1-2 демо-товари на категорію
11 Прийом замовлень поза графіком з виконанням у робочий час Адмінка → Налаштування → allow_orders_outside_hours Реалізовано як перемикач: вимкнено за замовчуванням (бот відмовляє поза графіком і пропонує лише перегляд меню)
12 Додаткові поля до замовлення (напр. коментар клієнта) Коментар до адреси доставки вже є (розділ 5, крок 2). Окремого поля "коментар до всього замовлення" немає — додати за потреби

Додатково варто уточнити

  • Часовий пояс: за замовчуванням Europe/Kyiv (.env → TIMEZONE).
  • Формат номера телефону: наразі приймається як є (текст або контакт Telegram), без валідації на +380.... Додати regex-перевірку, якщо потрібно жорсткіше.
  • Мова: базово інтерфейс українською, як і вимагає ТЗ. Додано повноцінний перемикач UA/EN у Mini App (з синхронізацією вибору назад у Telegram-бота через TelegramUser.locale), що охоплює весь бот і весь клієнтський Mini App — усі екрани, повідомлення бота, помилки при оформленні замовлення. Назви й описи страв перекладаються опційно, по одному товару (Product.name_en/description_en, заповнюється в адмінці) — товар без перекладу просто показує українську версію в англійському інтерфейсі. Адмінка залишається лише українською (внутрішній інструмент для персоналу). Деталі: див. docs/I18N.md.