AI-асистент для фінансового планування в мобільному додатку
Ми стикалися з ситуацією, коли користувач має п'ять банківських карток, два кредити і жодного інструменту для зведеного аналізу. Розрізнені дані не дають побачити реальну картину — витрати по одній картці перекриваються кредитними лімітами, а накопичення застигають на депозиті з мізерною ставкою. Наш AI-асистент збирає все в єдиний додаток, будує прозорий бюджет і дає actionable-поради, а не загальні фрази «скоротіть витрати». Ми робимо це під ключ, з інтеграцією будь-якого банківського API та безпечною обробкою даних. За 5 років роботи ми випустили понад 50 fintech-проектів, і кожен з них допоміг користувачам заощадити в середньому 10 000 RUB на місяць на необов'язкових витратах. Отримайте консультацію — ми оцінимо ваш проект безкоштовно.
Як 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
Прогнозування та цілі
Для розрахунку терміну досягнення цілі використовуємо просту формулу на 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 тижнів |
Вартість розраховується індивідуально. Оцінимо ваш проект безкоштовно — отримайте консультацію.







