BankBird
Aan de slag →
📚 Documentatie

Hoe BankBird
in elkaar zit

Alles over de architectuur, modellen en services voor developers die BankBird willen begrijpen, aanpassen of uitbreiden.

BankBird
🏗️

Architectuur

BankBird is een Laravel 11 applicatie met Filament 5 als admin panel. De app draait volledig op jouw eigen server — geen externe services behalve de optionele AI API.

architectuur
Browser / Livewire UIFilament 5 (Admin Panel)
        ↓
Controllers / Resources / PagesServices (ImportService, AiCategorizationService, ...)
        ↓
Eloquent Models (Transaction, Category, Merchant, ...)
        ↓
Database (MySQL of SQLite)
        ↓  (optioneel)
AI API (Anthropic Claude / OpenAI GPT)
📁

Mapstructuur

mapstructuur
bankbird/
├── app/
│   ├── Filament/         # Admin resources & pages
│   ├── Models/           # Eloquent modellen
│   └── Services/         # Business logica
├── database/
│   ├── migrations/       # Database schema
│   ├── factories/        # Test factories
│   └── seeders/          # Startdata
├── resources/
│   ├── views/            # Blade templates
│   └── css/ js/          # Frontend assets
└── tests/             # Feature & unit tests
🗄️

Modellen

Transaction

Kern van de app. Bevat bedrag, datum, omschrijving, categorie en merchant. Geïmporteerd uit bank-exports.

Category

Hiërarchische categorieën (bijv. Boodschappen > Albert Heijn). Gekoppeld aan transactions.

Merchant

Winkel- of leverancierspatronen. Worden herkend via regex op transactieomschrijvingen.

ImportBatch

Bijhoudt welke PDF of CSV is geïmporteerd, wanneer, hoeveel transacties en of AI is gebruikt.

User

Standaard Laravel User, uitgebreid met 2FA en voorkeuren voor AI provider.

AiLog

Slaat AI-categorisatieresultaten op voor debugging en het verbeteren van de prompts.

⚙️

Services

ImportService

Verwerkt geüploade PDF/CSV bestanden. Detecteert automatisch het bank-formaat en maakt Transaction-records aan.

import(UploadedFile $file) detectFormat(string $content) parseIng(string $content)
AiCategorizationService

Stuurt transactieomschrijvingen naar de geconfigureerde AI API en verwerkt de categorisatierespons.

categorize(Collection $transactions) buildPrompt(array $transactions) parseResponse(string $json)
MerchantMatchingService

Vergelijkt transactieomschrijvingen met opgeslagen merchant-patronen via regex en koppelt de categorie.

match(Transaction $transaction) findPattern(string $description) learnFromTransaction(Transaction $tx)
ReportService

Genereert overzichten, statistieken en exportbestanden op basis van gefilterde transacties.

monthly(int $year, int $month) yearly(int $year) export(Collection $transactions)
🔄

Workflows

📥 Importflow
1
Upload PDF/CSV
2
Format detecteren
3
Transacties parsen
4
Merchants matchen
5
AI categoriseren
6
Opslaan in DB
🤖 AI-categorisatieflow
1
Ongecategoriseerde transacties ophalen
2
Batch prompt bouwen
3
API call naar Claude/GPT
4
JSON response parsen
5
Categorieën koppelen
6
AiLog opslaan
🧪

Testen

BankBird gebruikt PHPUnit voor feature- en unittests. De testdatabase draait automatisch via SQLite in-memory.

bash
# Alle tests uitvoeren
php artisan test --compact

# Eén testbestand
php artisan test tests/Feature/ImportTest.php

# Filter op naam
php artisan test --filter=testImportIng
⚠️
Voer nooit tests uit op je productieschema. De tests wissen en seeden de testdatabase opnieuw.