Перейти к содержанию

02 one merchant

one_merchant_app — POS-терминал для мерчантов и агентов.

Назначение

Приложение для мерчантов и агентов OneWallet. Работает с accountType=merchant/agent. Версия 1.3.0+1. Мерчантов заводит администратор — самостоятельной регистрации нет (экраны /register/* отсутствуют).

Функции: ввод суммы оплаты, приём платежа через NFC или QR, просмотр истории, P2P-переводы, мини-приложения.

Отличия от one_loop_app

Функция one_loop one_merchant
KYC (онбординг с верификацией)
Самостоятельная регистрация
NFC write (программирование меток)
NFC read (приём оплаты)
POS экран (ввод суммы)
Создание инвойса/QR-оплаты
Referral flow при регистрации
Управление NFC-метками /nfc-tags
Guard B1a (zombie-state регистрации)
Guard B6 (заполнение профиля)
Тема (primary color) #FF5B00 Tangerine #110138 Night Sky

POS Flow

flowchart TD
    Home([/pos — ввод суммы]) --> Method{PosMethodSheet<br>выбор способа}
    Method -->|NFC| NfcAwait[/pos/nfc<br>ожидание касания]
    Method -->|QR| QrScreen[/pos/qr<br>показать QR-инвойс]
    NfcAwait -->|тег считан| CreateIntent[createIntent на сервере]
    QrScreen -->|покупатель сканирует| Polling[polling статуса intent]
    CreateIntent --> Polling
    Polling -->|succeeded| Result[/pos/result — успех]
    Polling -->|failed/expired| ResultFail[/pos/result — ошибка]
    Result --> Home2([вернуться на /pos])
    ResultFail --> Home2

Сумма хранится в satang (int) в posSessionProvider — float-погрешности исключены. Ввод через AmountKeypad: каждый тап сдвигает разряды влево (тап 1 → 1 satang = ฿0.01).

Экраны

Маршрут Экран Примечание
/ SplashScreen Начальный redirect
/welcome WelcomeScreen Только неавторизованные
/signin SignInScreen Только неавторизованные
/forgot-password ForgotPasswordScreen Только неавторизованные
/forgot-password/otp ForgotPasswordOtpScreen Только неавторизованные
/reset-password ResetPasswordScreen Только неавторизованные
/setup-pin SetupPinScreen PIN не установлен (B5)
/setup-biometric SetupBiometricScreen После установки PIN
/pin-unlock PinUnlockScreen Заблокирован (B2)
/home HomeScreen Shell, index 0
/pos PosAmountScreen Shell, index 1 — ввод суммы
/apps AppsScreen Shell, index 2
/profile ProfileScreen Shell, index 3
/pos/nfc PosNfcAwaitScreen Push route, без навбара
/pos/qr PosQrScreen Push route, без навбара
/pos/result PosResultScreen Push route, без навбара
/p2p/my-qr MyQrScreen Авторизован
/p2p/scan QrScannerScreen Авторизован
/p2p/phone-transfer PhoneTransferScreen Авторизован
/p2p/preview P2pPreviewScreen Авторизован
/p2p/status P2pStatusScreen Авторизован
/wallet WalletScreen Push route, без навбара
/history HistoryScreen Push route, без навбара
/transaction-detail TxDetailScreen Push route, extra: TxDetailArgs
/miniapp-viewer MiniappViewerScreen WebView мини-приложений

Тема

MerchantTheme расширяет AppTheme из onewallet_shared_ui, переопределяя primary-цвет:

Параметр Значение
Primary color (light) #110138 (AppTheme.nightSky)
Primary color (dark) #110138 (AppTheme.nightSky)
Базовая тема AppTheme.lightTheme / AppTheme.darkTheme с copyWith
Кнопки ElevatedButton с backgroundColor: MerchantTheme.primary
Splash (native) Конфигурация через flutter_native_splash

Тема объявлена в /lib/theme/merchant_theme.dart. Реэкспортирует AppTheme, AppSpacing, AppRadius из onewallet_shared_ui для единой точки импорта.