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.
Browser / Livewire UI ↓ Filament 5 (Admin Panel) ↓ Controllers / Resources / Pages ↓ Services (ImportService, AiCategorizationService, ...) ↓ Eloquent Models (Transaction, Category, Merchant, ...) ↓ Database (MySQL of SQLite) ↓ (optioneel) AI API (Anthropic Claude / OpenAI GPT)
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
Testen
BankBird gebruikt PHPUnit voor feature- en unittests. De testdatabase draait automatisch via SQLite in-memory.
# 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