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

37 lines
5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Що потрібно узгодити із замовником (розділ 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`.