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
Прогнозування та цілі
Для розрахунку терміну досягнення цілі використовуємо просту формулу на 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 тижнів |
Вартість розраховується індивідуально. Оцінимо ваш проект безкоштовно — отримайте консультацію.







