TaskMonkey Handbuch

Rezept: Banking-Cashflow-Dashboard

Bankkonten per FinAPI verbinden, Transaktionen syncen, Live-KPI-Dashboard für die GL.

Geschäftsführung will jeden Morgen sehen: Wie viel Geld ist auf welchen Konten? Was kam gestern rein, was ging raus? Reicht der Cashflow, um die nächsten anstehenden Zahlungen zu decken?

Mit FinAPI + Dashboards baust du das in einem halben Vormittag.

Ziel

  • Bankkonten per PSD2 verbunden
  • Stündlicher Sync der Transaktionen in die Plattform
  • KPI-Dashboard mit Saldo pro Konto, Eingänge/Ausgänge gestern und heute, Trend
  • Per Token-Link auf einem Bürodisplay aufrufbar

Voraussetzungen

  • PSD2-Online-Banking-Zugang zu den Geschäftskonten
  • Workspace mit aktivierter Banking-Integration (Betreiber konfiguriert FinAPI-Account)

1. Konten verbinden

Einmaliger Schritt im Browser:

  1. /manage/bank-accounts öffnen → Neue Verbindung
  2. Bank suchen, Online-Banking-Login (PSD2-Flow direkt bei der Bank)
  3. Konten auswählen, bestätigen

Damit liegen iban, bank_name, balance, currency in der DB. Bei mehreren Konten: das wichtigste in apis.php als Default hinterlegen.

'apis' => [
    'banking' => [
        'defaultIban' => 'DE12345678901234567890',
    ],
],

2. Stündlicher Auto-Sync

scheduled.php:

<?php
return [
    'scheduled' => [
        'sync_banking' => [
            'enabled' => true,
            'tool' => 'syncTransactions',
            'interval' => '1h',
        ],
    ],
];

syncTransactions ist ein Shared Tool — kommt aus der Plattform, du musst nichts selbst bauen.

3. KPI-Aggregation in ein Sheet

Damit das Dashboard live läuft, brauchst du eine Quelle, die in Cache-Frequenz aktuell ist. Variante: ein Tool, das alle paar Minuten ein Google Sheet mit den aktuellen Kennzahlen befüllt.

tools/banking/refreshCashflowKpis.php:

<?php
return [
    'tools' => [
        'refreshCashflowKpis' => [
            'description' => 'Berechnet aktuelle Cashflow-KPIs und schreibt sie in das KPI-Sheet.',
            'parameters' => ['type' => 'object', 'properties' => []],
            'handler' => function (array $results, array $args, array $ctx): array {
                $accounts = $ctx['runTool']('listAccounts', []);
                $totalBalance = array_sum(array_column($accounts['accounts'] ?? [], 'balance'));

                $today = $ctx['runTool']('getRecentTransactions', ['days' => 1]);
                $yesterday = $ctx['runTool']('getRecentTransactions', ['days' => 2]);

                $sumIn = function ($txs) {
                    return array_sum(array_filter(array_column($txs['transactions'] ?? [], 'amount'), fn($a) => $a > 0));
                };
                $sumOut = function ($txs) {
                    return abs(array_sum(array_filter(array_column($txs['transactions'] ?? [], 'amount'), fn($a) => $a < 0)));
                };

                $row = [
                    'Stand' => date('Y-m-d H:i'),
                    'Saldo gesamt' => $totalBalance,
                    'Eingang heute' => $sumIn($today),
                    'Ausgang heute' => $sumOut($today),
                    'Eingang gestern' => $sumIn($yesterday) - $sumIn($today),
                    'Ausgang gestern' => $sumOut($yesterday) - $sumOut($today),
                ];

                return $ctx['runTool']('appendToSheet', [
                    'sheetId' => 'sheet-id-aus-google-drive',
                    'row' => array_values($row),
                ]);
            },
        ],
    ],
];

Plus Scheduled Task alle 5 Minuten:

'refresh_cashflow_kpis' => [
    'enabled' => true,
    'tool' => 'refreshCashflowKpis',
    'interval' => '5min',
],

4. Dashboard-Konfiguration

dashboards.php:

<?php
return [
    'dashboards' => [
        'cashflow' => [
            'title' => 'Cashflow Live',
            'description' => 'Tagesaktueller Stand aller Geschäftskonten',
            'type' => 'kpi',
            'access' => 'token',
            'token' => 'long-random-token-here',
            'datasource' => [
                'type' => 'google_sheet',
                'slug' => 'cashflow-kpis',
                'sheetName' => 'Tabellenblatt1',
                'cache_ttl' => 60,
                'row' => 'last',
            ],
            'tiles' => [
                [
                    'title' => 'Saldo gesamt',
                    'column' => 'Saldo gesamt',
                    'format' => 'currency',
                    'size' => 'large',
                    'span' => 6,
                    'compare_mode' => 'neutral',
                ],
                ['type' => 'group', 'title' => 'Heute', 'icon' => '📅'],
                [
                    'title' => 'Eingänge',
                    'column' => 'Eingang heute',
                    'compare_column' => 'Eingang gestern',
                    'format' => 'currency',
                    'size' => 'large',
                    'span' => 3,
                    'compare_label' => 'gestern',
                    'compare_mode' => 'higher_is_better',
                ],
                [
                    'title' => 'Ausgänge',
                    'column' => 'Ausgang heute',
                    'compare_column' => 'Ausgang gestern',
                    'format' => 'currency',
                    'size' => 'large',
                    'span' => 3,
                    'compare_label' => 'gestern',
                    'compare_mode' => 'lower_is_better',
                ],
            ],
        ],
    ],
];

5. Aufrufen

https://taskmonkey.example.com/dashboards/view/cashflow?token=long-random-token-here&tenant=meco

Auf einem Wand-Display im GL-Büro: dauerhaft öffnen, Browser auf Vollbild, fertig.

Erweiterungen

  • Pro Konto eine Zeile statt nur Gesamtsumme: Tile-Set verdoppeln
  • Anstehende Belastungen aus dem Buchhaltungssystem: Tool, das offene Verbindlichkeiten zieht, plus Tile „Offene Verbindlichkeiten 30 Tage"
  • Alarm-Schwelle: Wenn Saldo unter X € fällt, Slack-Notification (Scheduled Task mit if-Logik)
  • Liquiditäts-Forecast: 7-Tage-Prognose basierend auf Vergangenheits-Pattern (Modell schreibt Forecast-Spalte)
Zuletzt aktualisiert: 2026-04-20