AI-ассистент для финансового планирования в мобильном приложении
Мы сталкивались с ситуацией, когда пользователь имеет пять банковских карт, два кредита и ни одного инструмента для сводного анализа. Разрозненные данные не дают увидеть реальную картину — траты по одной карте перекрываются кредитными лимитами, а накопления застывают на депозите с мизерной ставкой. Наш AI-ассистент собирает всё в единое приложение, строит прозрачный бюджет и даёт actionable-советы, а не общие фразы «сократите расходы». Мы делаем это под ключ, с интеграцией любого банковского API и безопасной обработкой данных. За 5 лет работы мы выпустили более 50 fintech-проектов, и каждый из них помог пользователям сэкономить в среднем $90–130 в месяц на необязательных тратах. Получите консультацию — мы оценим ваш проект бесплатно.
Как AI-ассистент анализирует ваши финансы?
Агрегация данных — первый и самый критичный слой. Мы используем три источника:
- Open Banking / PFM API: Plaid (США/Европа), Salt Edge (СНГ и Европа), Tinkoff API (Россия). Возвращают транзакции с категориями, балансы, историю за 12+ месяцев. Требуют OAuth-авторизацию.
- Apple Pay / Google Pay транзакции — через PassKit / Google Wallet API. Доступ ограничен, но для приложений с разрешением даёт ценные данные.
- Ручной ввод — всегда как fallback, с AI-автозаполнением категории и суммы через распознавание чека камерой.
// iOS - инициация Plaid Link import LinkKit func openPlaidLink() { var config = LinkTokenConfiguration(token: plaidLinkToken) { result in switch result { case .success(let success): self.exchangePublicToken(success.publicToken) case .failure(let error): print("Plaid error: \(error.localizedDescription)") } } let result = Plaid.create(config) switch result { case .success(let handler): handler.open(presentUsing: .viewController(self)) case .failure: break } } Категоризация транзакций: правила vs AI
Банки дают неоднородные категории — наша задача привести их к единой схеме. Мы используем двухэтапный подход:
| Метод | Покрытие | Скорость | Стоимость | Точность |
|---|---|---|---|---|
| Правила (MCC-коды, сетевые мерчанты) | 70–80% транзакций | ~1 мс | Практически бесплатно | 95%+ для типовых |
| AI (LLM) | Оставшиеся 10–15% | ~500 мс | Есть затраты на токены | 85–90% для нестандартных |
Правила в 10 раз быстрее и дешевле, но не справляются с уникальными покупками (например, подписка на малоизвестный сервис). AI решает эти 10–15% кейсов, которые иначе пришлось бы обрабатывать вручную.
func categorizeTransaction(_ transaction: RawTransaction) async throws -> Category { if let ruleCategory = ruleBasedCategorizer.categorize(transaction) { return ruleCategory } let prompt = """ Categorize this transaction into ONE category. Categories: food_groceries, food_restaurants, transport, housing, utilities, entertainment, health, education, shopping, travel, income, transfer, other Transaction: "\(transaction.merchantName)", amount: \(transaction.amount) \(transaction.currency) MCC code: \(transaction.mccCode ?? "unknown") Return only the category name, nothing else. """ let category = try await openAI.complete(prompt: prompt, maxTokens: 10) return Category(rawValue: category.trimmingCharacters(in: .whitespacesAndNewlines)) ?? .other } Как AI генерирует финансовые рекомендации?
Анализ расходов — детерминированный код, AI нужен для интерпретации. Сначала строим FinancialSnapshot: доходы, расходы по категориям, норма накоплений, повторяющиеся платежи и аномалии. Затем генерируем инсайт через LLM.
struct FinancialSnapshot { let monthlyIncome: Decimal let expensesByCategory: [Category: Decimal] let savingsRate: Double let recurringExpenses: [RecurringExpense] let unusualExpenses: [Transaction] } func generateInsight(snapshot: FinancialSnapshot) async throws -> String { let expenseSummary = snapshot.expensesByCategory .sorted { $0.value > $1.value } .prefix(5) .map { "\($0.key.displayName): \($0.value.formatted(.currency(code: "USD")))" } .joined(separator: "\n") let prompt = """ Financial data for this month: Income: \(snapshot.monthlyIncome.formatted(.currency(code: "USD"))) Savings rate: \(String(format: "%.1f", snapshot.savingsRate))% Top expenses: \(expenseSummary) Unusual this month: \(snapshot.unusualExpenses.map { $0.description }.prefix(3).joined(separator: ", ")) Give 2-3 specific, actionable insights. Be direct. No generic advice. Example: "Расходы на кафе выросли на 40% по сравнению с прошлым месяцем — 18 транзакций вместо 12." """ return try await openAI.complete(prompt: prompt, maxTokens: 200) } Фраза «No generic advice» в промпте критична: без неё модель выдаёт «сократите расходы на еду» вместо конкретных цифр. OpenAI Prompt Engineering Guide
Прогнозирование и цели
Для расчёта срока достижения цели используем простую формулу на Kotlin:
// Android - расчёт срока достижения цели data class SavingsGoal( val name: String, val targetAmount: BigDecimal, val savedAmount: BigDecimal, val monthlyContribution: BigDecimal ) fun calculateGoalTimeline(goal: SavingsGoal): GoalTimeline { val remaining = goal.targetAmount - goal.savedAmount if (goal.monthlyContribution <= BigDecimal.ZERO) { return GoalTimeline.Unachievable } val months = (remaining / goal.monthlyContribution).toLong() val achieveDate = LocalDate.now().plusMonths(months) return GoalTimeline.Achievable(achieveDate, months) } AI подключается для оптимизации: находит категории с наибольшим потенциалом сокращения расходов и предлагает перераспределить их в накопления.
Пошаговая инструкция: как подключить свой банк
- Выберите банк из поддерживаемых — мы предоставляем список из 50+ банков через Plaid и Salt Edge.
- Авторизуйтесь через OAuth — приложение перенаправляет вас на страницу банка, где вы вводите логин и пароль (данные не передаются нам).
- Подтвердите доступ — после успешного входа вы получаете токен, который сохраняется локально.
- Настройте категории — AI автоматически распределит транзакции, но вы можете вручную переопределить любую категорию.
- Анализируйте — в реальном времени приложение строит бюджет, прогнозы и даёт рекомендации.
Почему важно обезличивать данные перед отправкой в LLM?
Финансовые данные нельзя передавать в raw-виде. Наш пайплайн обезличивания:
- Суммы округляем до порядков (не $430–620, а ~48 000)
- Названия магазинов хэшируем или заменяем категорией
- Никогда не отправляем номера счетов, реквизиты, ФИО
На iOS используем DataProtection.complete для локального хранилища транзакций — файл зашифрован ключом, недоступным пока устройство заблокировано. На Android — EncryptedSharedPreferences + EncryptedFile из security-crypto. Дополнительно мы шифруем данные в передаче через TLS 1.3.
Список поддерживаемых банков через Open Banking
Plaid: 12 000+ финансовых институтов в США, Канаде, Европе. Salt Edge: 6 000+ банков в СНГ, Европе, Азии. Tinkoff API: все карты и счета Тинькофф. Для других банков — ручной ввод с AI-распознаванием чеков.Что входит в работу
Мы предоставляем:
- Архитектуру и документацию по интеграциям
- Доступ к SDK (iOS/Android) с примерами
- Настройку серверной части для обогащения данных
- Техническую поддержку на этапе внедрения
- Обучение команды работе с AI-моделями
Команда имеет 5+ лет опыта в fintech и выпустила более 50 проектов с AI и Open Banking. Свяжитесь — и мы подготовим архитектуру под ваш проект.
Ориентиры по срокам
| Этап | Длительность |
|---|---|
| Базовый анализ с ручным вводом + AI-инсайты | от 1 недели |
| Полная реализация с Open Banking, автокатегоризацией, целями | 6–10 недель |
Стоимость рассчитывается индивидуально. Оценим ваш проект бесплатно — получите консультацию.







