+
Buchhaltungsdaten importieren
+
+ Kontenplan, Buchungen, Kontakte und Salden aus dem Buchhaltungssystem einlesen.
+ Diese Daten stehen anschliessend im AI Workspace fuer Analysen zur Verfuegung.
+
+
+
+
+ {[
+ { label: 'YTD', from: `${new Date().getFullYear()}-01-01`, to: new Date().toISOString().slice(0, 10) },
+ {
+ label: 'Letztes Jahr',
+ from: `${new Date().getFullYear() - 1}-01-01`,
+ to: `${new Date().getFullYear() - 1}-12-31`,
+ },
+ {
+ label: 'Letzter Monat',
+ from: (() => { const d = new Date(); d.setDate(1); d.setMonth(d.getMonth() - 1); return d.toISOString().slice(0, 10); })(),
+ to: (() => { const d = new Date(); d.setDate(0); return d.toISOString().slice(0, 10); })(),
+ },
+ ].map(s => (
+ { setDateFrom(s.from); setDateTo(s.to); }}
+ >
+ {s.label}
+
+ ))}
+
+
+
{
+ if (!instanceId) return;
+ setImporting(true);
+ setImportResult(null);
+ try {
+ const body: Record = {};
+ if (dateFrom) body.dateFrom = dateFrom;
+ if (dateTo) body.dateTo = dateTo;
+ const res = await request({ url: `/api/trustee/${instanceId}/accounting/import-data`, method: 'post', data: body });
+ if (mountedRef.current) {
+ setImportResult(res.data);
+ if (res.data.errors?.length) {
+ showError('Import teilweise fehlgeschlagen', res.data.errors.join('; '));
+ } else {
+ showSuccess('Import abgeschlossen',
+ `${res.data.accounts || 0} Konten, ${res.data.journalEntries || 0} Buchungen, ` +
+ `${res.data.contacts || 0} Kontakte, ${res.data.accountBalances || 0} Salden importiert.`);
+ }
+ _loadImportStatus();
+ }
+ } catch (err: any) {
+ showError('Import fehlgeschlagen', err.response?.data?.detail || err.message || 'Unbekannter Fehler');
+ } finally {
+ setImportDone(true);
+ }
+ }}
+ >
+ {importing ? 'Importiere...' : 'Daten jetzt einlesen'}
+
+
+ {importResult && !importResult.errors?.length && (
+
+ Import abgeschlossen in {importResult.durationSeconds}s:
+ {' '}{importResult.accounts} Konten, {importResult.journalEntries} Buchungen ({importResult.journalLines} Zeilen),
+ {' '}{importResult.contacts} Kontakte, {importResult.accountBalances} Salden
+
+ )}
+
+ {importStatus && (importStatus.accounts > 0 || importStatus.journalEntries > 0) && (
+
+ Aktueller Datenbestand: {' '}
+ {importStatus.accounts} Konten, {importStatus.journalEntries} Buchungen,
+ {' '}{importStatus.journalLines} Zeilen, {importStatus.contacts} Kontakte,
+ {' '}{importStatus.accountBalances} Salden
+ {importStatus.lastSyncAt && (
+ <> · Letzter Import: {new Date(importStatus.lastSyncAt * 1000).toLocaleString()}>
+ )}
+
+ )}
+