AI-ассистент для финансового планирования в мобильном приложении
Мы сталкивались с ситуацией, когда пользователь имеет пять банковских карт, два кредита и ни одного инструмента для сводного анализа. Разрозненные данные не дают увидеть реальную картину — траты по одной карте перекрываются кредитными лимитами, а накопления застывают на депозите с мизерной ставкой. Наш AI-ассистент собирает всё в единое приложение, строит прозрачный бюджет и даёт actionable-советы, а не общие фразы «сократите расходы». Мы делаем это под ключ, с интеграцией любого банковского API и безопасной обработкой данных. За 5 лет работы мы выпустили более 50 fintech-проектов, и каждый из них помог пользователям сэкономить в среднем 10 000 рублей в месяц на необязательных тратах. Получите консультацию — мы оценим ваш проект бесплатно.
Как 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: "RUB")))" }
.joined(separator: "\n")
let prompt = """
Financial data for this month:
Income: \(snapshot.monthlyIncome.formatted(.currency(code: "RUB")))
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-виде. Наш пайплайн обезличивания:
- Суммы округляем до порядков (не 47 839 руб, а ~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 недель |
Стоимость рассчитывается индивидуально. Оценим ваш проект бесплатно — получите консультацию.







