BR 3.1 — POS (BFF + UI)
Репо
erp-pos— в bootstrap-стадии. POS-экраны пока не специфицированы кроме flow прикрепления клиента к заказу (BR 3.1). Задачи ниже — только та часть, что нужна для BR 3.1.
Контракты
POS BFF задачи
1. Proxy routes
-
/api/v1/pos/customers/search?phone=...— прокси вGET /api/v1/customers/searchCustomer Service -
/api/v1/pos/customers(POST) — прокси вPOST /api/v1/customers- Устанавливать
registration_source='pos'иregistered_by_employee_idиз JWT кассира
- Устанавливать
-
/api/v1/pos/orders/{id}/customer(PATCH) — прокси вPATCH /api/v1/orders/{id}/customerOrder Service -
/api/v1/pos/orders/{id}/customer(DELETE) — прокси вDELETE /api/v1/orders/{id}/customer
2. Авторизация
- Проверка permission
customers.create_quickв JWT перед проксированием — если нет, BFF возвращает 403 без обращения к backend
3. Тесты
- Моки backend-сервисов, проверка прокси + установка
registration_source
POS UI задачи
В зависимости от готовности POS-фронта — можно реализовать параллельно или отложить после других POS-экранов.
1. Экран заказа — шапка с клиентом
- На шапке текущего заказа — компонент
OrderCustomerBadge:- Если
order.customer_id == nullи permissioncustomers.create_quick→ кнопка «Клиент» (открывает модалку) - Если
order.customer_id != null→ имя клиента + chips групп + бейдж «🎂» если ДР в ±14 дней + крестик «×» для открепления - Если нет permission
customers.create_quick→ компонент не рендерится
- Если
2. Модалка «Найти клиента»
- Компонент
CustomerSearchModalсо состояниями:default/searching/found/not_found/creating - Поле ввода телефона с маской
+7 (___) ___-__-__ - Утилита
normalizePhoneE164(та же что в Admin Web — общийsharedмодуль, если есть) - По заполнении 10 цифр — автоматический вызов
GET /pos/customers/search?phone=... - Рендер результата:
found→ карточка-мини (имя, phone, chips групп, LTV, бейджи, кнопка «Прикрепить»)not_found→ форма quick-create (имя обязательное, email/ДР опциональные, кнопка «Создать и прикрепить»)
- После успеха — toast + модалка закрывается + шапка заказа перерисовывается
3. Открепление
- Клик по «×» на шапке →
DELETE /pos/orders/{id}/customer→ toast «Клиент откреплён» (без модалки подтверждения)
4. Compliance-нотификация
- После успешного quick-create — toast на 3 сек: «Клиент создан. Убедитесь, что собрано согласие на обработку ПД»
5. Тесты
- Unit: валидация phone, состояния модалки
- Integration (когда появится e2e-инфра POS): mock server + прогон flow
Definition of Done
- Кассир с
customers.create_quickвидит кнопку «Клиент» на экране заказа - Можно найти существующего клиента и прикрепить к заказу
- Можно создать нового клиента через quick-form и прикрепить
- Клиент виден в шапке заказа, можно открепить
- Без permission кнопка скрыта