# Baby in Brazil Custom Route Configurator — архитектура v0.1

## Решение

Конфигуратор не является «формой сайта». Это channel-neutral доменная функция с четырьмя адаптерами: Website, Assistant Widget, Telegram и WhatsApp.

## 1. Единый источник истины

`data/services.json` содержит:
- публичные пакетные якоря и цены;
- 41 услугу из PDF и минимальный пакетный уровень, где она появляется;
- три предложенных обязательных core-направления;
- add-ons, для которых PDF даёт отдельную цену;
- внешние расходы, которые не входят в service estimate.

Бот, сайт и виджет не должны держать свои копии этого каталога.

## 2. Три обязательных core-направления

Это design proposal текущей итерации, а не утверждение из PDF:
1. Документы и легализация: Full documentation + Notary services.
2. Приезд и старт: Arrival Transfer at Florianópolis Airport.
3. Медицинская координация: Recommendations of professionals + Choosing a maternity hospital.

Core нельзя снять обычным toggle. Если бизнес позже изменит состав mandatory-части, меняется только JSON/rules, а не четыре интерфейса.

## 3. Почему custom не считает точную сумму

PDF фиксирует цены пяти пакетов — USD 3,500 / 4,250 / 5,500 / 8,000 / 11,500 — и матрицу включения услуг, но не содержит цены каждой отдельной позиции.

Поэтому reference engine использует два режима:
- `exact_package`: выбранный набор полностью совпадает с публичным пакетом;
- `benchmark_range`: custom-набор попадает между соседними пакетными ценовыми якорями.

Пример: выбран хотя бы один Prenatal-only сервис, но не весь Prenatal Care → ориентир USD 4,250–5,500. Это не коммерческая котировка, а UX-ориентир для handoff.

## 4. Отдельно priced add-ons

Из PDF можно честно считать отдельно:
- документы для siblings: USD 350 / 700 / 1,000;
- Citizenship Assistance: USD 750 per person;
- Women-Only Medical Team: +USD 1,000.

## 5. Внешние расходы

Не смешиваются с ценой услуг Baby in Brazil. В отдельном блоке можно показывать типичные значения из PDF:
- hospital private room: USD 3,150;
- shared room: USD 2,400;
- governmental fees: около USD 400;
- комфортная 2-bedroom apartment: около USD 1,000/month;
- flights и personal expenses — variable.

## 6. Cross-channel contract

UI отправляет только команды:
- `configurator.start`
- `configurator.apply_preset`
- `configurator.toggle_service`
- `configurator.toggle_addon`
- `configurator.summary`
- `configurator.handoff`

Состояние сессии одинаково для всех каналов. Telegram/WhatsApp не «понимают цены» сами; они лишь отображают результат rules engine.

## 7. Масштабирование

Следующий production-шаг — вынести catalog/rules в API или общий service package. Тогда:
- website — rich cards + checkboxes;
- site assistant — quick replies;
- Telegram — inline keyboard / paginated category lists;
- WhatsApp — interactive list/buttons;
- оператор получает единый `handoffText` и `sessionId`.

## 8. Что пока не делать

- Не хардкодить unit-price по каждой услуге без business pricebook.
- Не заставлять LLM самостоятельно вычислять коммерческую цену.
- Не смешивать service price и внешние расходы.
- Не создавать четыре независимые версии каталога для четырёх каналов.
