20-02-2026

This commit is contained in:
Kevin Adametz 2026-02-20 17:55:06 +01:00
parent a8b395e20d
commit a00c42e770
252 changed files with 28785 additions and 8907 deletions

View file

@ -0,0 +1,5 @@
EXTF;700;21;Buchungsstapel;13;2,02E+16;;ERP;Alois Ried;;1001;1;20250101;4;20250701;20250731;;;1;0;0;EUR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Umsatz (ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;WKZ Umsatz;Kurs;Basis-Umsatz;WKZ Basis-Umsatz;Konto;Gegenkonto (ohne BU-SchlŸssel);BU-SchlŸssel;Belegdatum;Belegfeld 1;Belegfeld 2;Skonto;Buchungstext;Postensperre;Diverse Adressnummer;GeschŠftspartnerbank;Sachverhalt;Zinssperre;Beleglink;Beleginfo - Art 1;Beleginfo - Inhalt 1;Beleginfo - Art 2;Beleginfo - Inhalt 2;Beleginfo - Art 3;Beleginfo - Inhalt 3;Beleginfo - Art 4;Beleginfo - Inhalt 4;Beleginfo - Art 5;Beleginfo - Inhalt 5;Beleginfo - Art 6;Beleginfo - Inhalt 6;Beleginfo - Art 7;Beleginfo - Inhalt 7;Beleginfo - Art 8;Beleginfo - Inhalt 8;KOST1 - Kostenstelle;KOST2 - Kostenstelle;Kost-Menge;EU-Land u. UStID;EU-Steuersatz;Abw. Versteuerungsart;Sachverhalt L+L;FunktionsergŠnzung L+L;BU 49 Hauptfunktionstyp;BU 49 Hauptfunktionsnummer;BU 49 FunktionsergŠnzung;Zusatzinformation - Art 1;Zusatzinformation- Inhalt 1;Zusatzinformation - Art 2;Zusatzinformation- Inhalt 2;Zusatzinformation - Art 3;Zusatzinformation- Inhalt 3;Zusatzinformation - Art 4;Zusatzinformation- Inhalt 4;Zusatzinformation - Art 5;Zusatzinformation- Inhalt 5;Zusatzinformation - Art 6;Zusatzinformation- Inhalt 6;Zusatzinformation - Art 7;Zusatzinformation- Inhalt 7;Zusatzinformation - Art 8;Zusatzinformation- Inhalt 8;Zusatzinformation - Art 9;Zusatzinformation- Inhalt 9;Zusatzinformation - Art 10;Zusatzinformation- Inhalt 10;Zusatzinformation - Art 11;Zusatzinformation- Inhalt 11;Zusatzinformation - Art 12;Zusatzinformation- Inhalt 12;Zusatzinformation - Art 13;Zusatzinformation- Inhalt 13;Zusatzinformation - Art 14;Zusatzinformation- Inhalt 14;Zusatzinformation - Art 15;Zusatzinformation- Inhalt 15;Zusatzinformation - Art 16;Zusatzinformation- Inhalt 16;Zusatzinformation - Art 17;Zusatzinformation- Inhalt 17;Zusatzinformation - Art 18;Zusatzinformation- Inhalt 18;Zusatzinformation - Art 19;Zusatzinformation- Inhalt 19;Zusatzinformation - Art 20;Zusatzinformation- Inhalt 20;StŸck;Gewicht;Zahlweise;Forderungsart;Veranlagungsjahr;Zugeordnete FŠlligkeit;Skontotyp;Auftragsnummer;Buchungstyp;USt-SchlŸssel (Anzahlungen);EU-Land (Anzahlungen);Sachverhalt L+L (Anzahlungen);EU-Steuersatz (Anzahlungen);Erlšskonto (Anzahlungen);Herkunft-Kz;Buchungs GUID;KOST-Datum;SEPA-Mandatsreferenz;Skontosperre;Gesellschaftername;Beteiligtennummer;Identifikationsnummer;Zeichnernummer;Postensperre bis;Bezeichnung SoBil-Sachverhalt;Kennzeichen SoBil-Buchung;Festschreibung;Leistungsdatum;Datum Zuord. Steuerperiode
119;H;;;;;8400;10000;9;107;201911;;;Nachname Vorname, Kundennummer;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107;H;;;;;8401;10000;8;107;201911;;;Nachname Vorname, Kundennummer;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
119;S;;;;;4760;70000;9;207;202501;;;"Karrer Christian; BeraterNr";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 EXTF 700 21 Buchungsstapel 13 2,02E+16 ERP Alois Ried 1001 1 20250101 4 20250701 20250731 1 0 0 EUR
2 Umsatz (ohne Soll/Haben-Kz) Soll/Haben-Kennzeichen WKZ Umsatz Kurs Basis-Umsatz WKZ Basis-Umsatz Konto Gegenkonto (ohne BU-SchlŸssel) BU-SchlŸssel Belegdatum Belegfeld 1 Belegfeld 2 Skonto Buchungstext Postensperre Diverse Adressnummer GeschŠftspartnerbank Sachverhalt Zinssperre Beleglink Beleginfo - Art 1 Beleginfo - Inhalt 1 Beleginfo - Art 2 Beleginfo - Inhalt 2 Beleginfo - Art 3 Beleginfo - Inhalt 3 Beleginfo - Art 4 Beleginfo - Inhalt 4 Beleginfo - Art 5 Beleginfo - Inhalt 5 Beleginfo - Art 6 Beleginfo - Inhalt 6 Beleginfo - Art 7 Beleginfo - Inhalt 7 Beleginfo - Art 8 Beleginfo - Inhalt 8 KOST1 - Kostenstelle KOST2 - Kostenstelle Kost-Menge EU-Land u. UStID EU-Steuersatz Abw. Versteuerungsart Sachverhalt L+L FunktionsergŠnzung L+L BU 49 Hauptfunktionstyp BU 49 Hauptfunktionsnummer BU 49 FunktionsergŠnzung Zusatzinformation - Art 1 Zusatzinformation- Inhalt 1 Zusatzinformation - Art 2 Zusatzinformation- Inhalt 2 Zusatzinformation - Art 3 Zusatzinformation- Inhalt 3 Zusatzinformation - Art 4 Zusatzinformation- Inhalt 4 Zusatzinformation - Art 5 Zusatzinformation- Inhalt 5 Zusatzinformation - Art 6 Zusatzinformation- Inhalt 6 Zusatzinformation - Art 7 Zusatzinformation- Inhalt 7 Zusatzinformation - Art 8 Zusatzinformation- Inhalt 8 Zusatzinformation - Art 9 Zusatzinformation- Inhalt 9 Zusatzinformation - Art 10 Zusatzinformation- Inhalt 10 Zusatzinformation - Art 11 Zusatzinformation- Inhalt 11 Zusatzinformation - Art 12 Zusatzinformation- Inhalt 12 Zusatzinformation - Art 13 Zusatzinformation- Inhalt 13 Zusatzinformation - Art 14 Zusatzinformation- Inhalt 14 Zusatzinformation - Art 15 Zusatzinformation- Inhalt 15 Zusatzinformation - Art 16 Zusatzinformation- Inhalt 16 Zusatzinformation - Art 17 Zusatzinformation- Inhalt 17 Zusatzinformation - Art 18 Zusatzinformation- Inhalt 18 Zusatzinformation - Art 19 Zusatzinformation- Inhalt 19 Zusatzinformation - Art 20 Zusatzinformation- Inhalt 20 StŸck Gewicht Zahlweise Forderungsart Veranlagungsjahr Zugeordnete FŠlligkeit Skontotyp Auftragsnummer Buchungstyp USt-SchlŸssel (Anzahlungen) EU-Land (Anzahlungen) Sachverhalt L+L (Anzahlungen) EU-Steuersatz (Anzahlungen) Erlšskonto (Anzahlungen) Herkunft-Kz Buchungs GUID KOST-Datum SEPA-Mandatsreferenz Skontosperre Gesellschaftername Beteiligtennummer Identifikationsnummer Zeichnernummer Postensperre bis Bezeichnung SoBil-Sachverhalt Kennzeichen SoBil-Buchung Festschreibung Leistungsdatum Datum Zuord. Steuerperiode
3 119 H 8400 10000 9 107 201911 Nachname Vorname, Kundennummer
4 107 H 8401 10000 8 107 201911 Nachname Vorname, Kundennummer
5 119 S 4760 70000 9 207 202501 Karrer Christian; BeraterNr

Binary file not shown.

View file

@ -0,0 +1,143 @@
### Die drei offenen Tickets aus
dev/22-01-2026/next-steps.md
### [✓] 13. Steuerberater-Modul (DATEV-Export)
**Priorität:** Hoch
**Status:** Umgesetzt (Phase 1)
**Umgesetzte Features:**
1. **DATEV EXTF-Buchungsstapel-Export** (`DatevExportService`)
- Rechnungen, Gutschriften/Provisionen, Stornos
- EXTF-Header + 116-Spalten CSV gemäß DATEV Developer Portal
- Periodenauswahl (Monat/Jahr)
2. **Erlöskonto-Mapping nach Steuerberater-Vorgabe**
- 8400 Erlöse 19% (BU 9) Inland
- 8300 Erlöse 7% (BU 8) Inland reduziert
- 8125 IG-Lieferung steuerfrei §4 Nr. 1b (BU 1) **nur bei EU + gültiger USt-ID**
- 8120 Drittland steuerfrei §4 Nr. 1a (BU 11)
3. **Fachliche Regel: EU-Steuerbefreiung nur mit USt-ID**
- Nur registrierte Berater (`auth_user`) mit hinterlegter `tax_identification_number` erhalten BU 1
- Gäste und Berater ohne USt-ID → reguläre Inlandsbesteuerung (19%/7%)
- USt-ID wird über `ShoppingOrder → auth_user → account → tax_identification_number` ermittelt
4. **Provisions-Steuerschlüssel**
- 4760 Verkaufsprovision (Shop + Wachstumsbonus)
- 4764 Payline-Provision
- Normal (BU 9), Kleinunternehmer (BU 50), Reverse Charge (BU 94)
5. **Gegenkonto-Mapping**
- PayPal → 1230
- Sonstige → Sammeldebitor (konfigurierbar)
- Provisionen → Sammelkreditor
6. **Validierung mit klickbaren Warnungen**
- Strukturierte Warnungen/Fehler mit Metadaten (source_id, order_id, user_id)
- Links zur Rechnung (Rechnungssuche) und zum Berater (Detailseite)
- Prüfungen: Belegdatum, Belegnummer, BU-Schlüssel, EU ohne USt-ID, Reverse Charge ohne USt-ID
7. **DataTable mit Suchfunktion**
- Durchsuchbar nach Rechnungsnummer, Buchungstext, Konto, USt-ID, etc.
- Server-seitige Verarbeitung via Yajra DataTables
8. **Admin-UI** (Route: `admin_payments_taxadvisor`)
- Vorschau laden → Zusammenfassung + Validierung
- Export generieren → CSV + DB-Protokoll
- Download, Lock, Löschen
**Geänderte Dateien:**
- `app/Services/DatevExportService.php` Kernlogik
- `app/Http/Controllers/PaymentTaxAdvisorController.php` Controller
- `resources/views/admin/payment/taxadvisor.blade.php` View
- `config/datev.php` Konfiguration
- `tests/Unit/Services/DatevExportServiceTest.php` 35 Tests
**Offene Punkte (Phase 2):**
- Debitoren/Kreditoren-Stammdaten (wenn Steuerberater OP-Listen braucht)
- Payone-Debitor-Mapping (detaillierter als Sammeldebitor)
- Automatischer Periodenabschluss / Sperr-Workflow
---
### [!] 10. Nicht zugeordnete Zahlungen/Punkte
**Priorität:** Hoch
**Bereich:** Payment / Admin
**Problem:**
Zahlungen ohne Zuordnung → Punkte verschwinden, keine Provision.
**Anforderung:**
- Admin-Hinweis bei nicht zugeordneten Zahlungen
- Manuelle Zuordnungsmöglichkeit
**Technische Details:**
| Parameter | Wert |
|-----------|------|
| Tabelle | `user_sales_volumes` |
| Status-Feld | `status = 0` (not_assigned) |
| Admin-View | Dashboard oder separate Sektion |
**Query für nicht zugeordnete Einträge:**
```php
$unassigned = UserSalesVolume::where('status', 0)
->with('user', 'order')
->orderBy('created_at', 'desc')
->get();
```
**Umsetzung:**
1. **Dashboard-Alert:** Anzahl nicht zugeordneter Einträge anzeigen
2. **Admin-Seite:** Liste aller nicht zugeordneten Einträge
3. **Zuordnungs-Modal:**
- User auswählen (Dropdown/Suche)
- Status aktualisieren (1 = advisor_order, 2 = shoporder)
- Punkte werden bei nächster Berechnung berücksichtigt
---
### [ ] 11. Monatsstatistik Erweiterungen
**Priorität:** Mittel
**Bereich:** Dashboard / Team
**Probleme:**
- Teamumsatz wird seit Januar nicht angezeigt
- Neupartner/Abos nicht klickbar (keine Detailansicht)
**Anforderungen:**
| Feature | Beschreibung |
|---------|--------------|
| Teamumsatz | Bug fixen - wird nicht angezeigt |
| Neupartner Details | Klick → Liste mit Name, E-Mail, Telefon, Generation, Mentor |
| Team-Abos Details | Klick → Liste mit Abo-Details |
| 1000-Punkte-Shops | Neue Kennzahl: Teampartner mit ≥1000 Punkte persönlichem Volumen |
| Aktuelle Provision | In Monatsstatistik anzeigen |
| Downline-Kontakte | Telefon, E-Mail, Adresse der eigenen Downline abrufbar (nicht nur VIPs) |
**Technische Details:**
| Parameter | Wert |
|-----------|------|
| Service | `App\Services\LevelReportService` |
| Controller | `App\Http\Controllers\User\TeamController` |
| View | `resources/views/user/team/marketingplan.blade.php` |
| Daten | `user_business` Tabelle |
**1000-Punkte Query:**

View file

@ -0,0 +1,291 @@
### Vom Steuerberater.
Umsatzerlöse
- 8400 Erlöse 19% -> Steuerschlüssel 9
- 8300 Erlöse 7% -> Steuerschlüssel 8
- 8120 Steuerfreie Umsätze nach § 4 Nr. 1a UStG (Drittland) -> Steuerschlüssel = 11
- 8125 Steuerfreie innergemeinschaftliche Lieferungen nach § 4 Nr. 1b UStG (EU) -> Steuerschlüssel = 1
Provisionen (Unterscheidung in Shop, Payline und Wachstumsbonus)
- 4760 Verkaufsprovision (Shop + Wachstumsbonus)
o 19% -> Steuerschlüssel = 9
o Kleinunternehmer -> Steuerschlüssen = 50
o Reverse Charge -> Steuerschlüssel = 94
- 4764 (Payline)
o 19% -> Steuerschlüssel = 9
o Kleinunternehmer -> Steuerschlüssen = 50
o Reverse Charge -> Steuerschlüssel = 94
Relevante Felder/Spalten
- Umsatz (Spalte A) -> Bruttobetrag je Steuerschlüssel
- Soll/Haben (Spalte B)
o Umsatz -> H
o Provisionen -> S
- Konto (Spalte G)
o Umsätze -> siehe Umsatzerlöse
o Provisionen -> siehe Gutschriften
- Gegenkonto (Spalte H)
o Umsatzerlöse = Debitorenkonto (vermutlich Sammelkonto)
o Provisionen = Kreditorenkonto (vermutlich Sammelkonto)
- Buchungsschlüssel
o Steuerschlüssel siehe oben je Sachverhalt
- Belegdatum (Spalte J) = Rechnungs-/Gutschriftsdatum
- Belegfeld 1 (Spalte K)
o Umsatz = Rechnungsnummer
o Gutschrift = Gutschriftnummer
- Buchungstext (Spalte N)
o Umsatz = Name Kunde (Nachname Vorname)
o Provisionen = Name Kunde (Nachname Vorname)
- EU-Land u. UStID (Spalte AN)
o USt-ID
Gegenkonto Umsatz
- Payone -> Debitor (Mapping erforderlich)
- Paypal -> 1230
- Kunden -> vermutlich Sammeldebitor
Gegenbuchung Provisionen
- Kreditor 71586
- Vermutlich Sammelkreditor
Zu klären
- Kundennummer erforderlich?
- Kreditorennummer erforderlich?
Erläuterungen
1. Header
a. DATEV-Format - DATEV Developer Portal
2. Buchungsstapel
a. DATEV-Format - DATEV Developer Portal
### Erste Konzeption für ein DATEV-Export-Modul (EXTF „Buchungsstapel“) im Laravel-CRM basierend auf dem Briefing des Steuerberaters und orientiert am DATEV Developer Portal (Header + Buchungsstapel).
1. Zielbild: Was das Modul am Ende liefern muss
Output: pro Abrechnungsperiode (z. B. Monat) eine Datei EXTF_Buchungsstapel.csv mit 1. Header-Satz (erste Zeile, beginnt mit EXTF;700;21;...) 2. Spaltenkopfzeile (zweite Zeile) 3. Buchungszeilen (ab Zeile 3, je Buchung eine Zeile)
Euer Beispiel/Template entspricht genau diesem Muster (Headerzeile + Spaltenkopfzeile + Daten).
2. Fachliche Logik (Mapping) so entstehen Buchungszeilen
2.1 Buchungsarten (aus euren CRM-Daten ableitbar)
Ihr habt im System bereits: Bestellungen, Rechnungen, Gutschriften, Storno usw. Daraus leitet ihr je Datensatz eine „Buchungsart“ ab:
• Umsatz (Rechnung / Belastung)
• Soll/Haben: H
• Konto: Erlöskonto (8400/8300/8120/8125)
• Gegenkonto: Debitor/Zahlkonto (Payone/PayPal/Sammeldebitor)
• Provision (Gutschrift / Abzug) (Shop, Payline, Wachstumsbonus)
• Soll/Haben: S
• Konto: 4760 (Shop+Wachstumsbonus) oder 4764 (Payline)
• Gegenkonto: Kreditor (z. B. 71586 oder Sammelkreditor)
Wichtig: „Provision“ ist in eurem Export fachlich eine eigene Buchungslogik, auch wenn sie technisch über Gutschriften abgebildet ist.
2.2 Steuerschlüssel & Konten (1:1 aus dem Briefing)
Umsatzerlöse
• 8400 Erlöse 19% → Steuerschlüssel 9
• 8300 Erlöse 7% → Steuerschlüssel 8
• 8120 Drittland steuerfrei §4 Nr. 1a → Steuerschlüssel 11
• 8125 IG Lieferung steuerfrei §4 Nr. 1b → Steuerschlüssel 1
Provisionen
• 4760 Verkaufsprovision (Shop + Wachstumsbonus)
• 19% → 9
• Kleinunternehmer → 50
• Reverse Charge → 94
• 4764 (Payline)
• 19% → 9
• Kleinunternehmer → 50
• Reverse Charge → 94
2.3 Relevante DATEV-Spalten (aus Steuerberater-Vorgabe)
Ihr befüllt (mindestens) folgende Felder:
• Spalte A Umsatz: Bruttobetrag je Steuerschlüssel
• Spalte B Soll/Haben: Umsatz = H, Provisionen = S
• Spalte G Konto: wie oben
• Spalte H Gegenkonto: Debitor/Kreditor/Zahlkonto (Mapping)
• Buchungsschlüssel (BU-Schlüssel): Steuerschlüssel wie oben
• Belegdatum (Spalte J): Rechnungs-/Gutschriftsdatum
• Belegfeld 1 (Spalte K): Rechnungsnummer / Gutschriftsnummer
• Buchungstext (Spalte N): Name Kunde „Nachname Vorname“
• EU-Land u. UStID (Spalte AN): USt-ID (wenn vorhanden)
Die restlichen DATEV-Spalten bleiben leer (aber müssen als Trennzeichen „mitlaufen“, weil das Format feste Spaltenpositionen hat).
3. Gegenkonto-Logik (entscheidet über Debitor/Zahlkonto)
Aus dem Briefing:
Gegenkonto Umsatz
• Payone → Debitor (Mapping erforderlich)
• PayPal → 1230
• Kunden → Sammeldebitor (vermutlich)
Gegenbuchung Provisionen
• Kreditor 71586 (oder Sammelkreditor)
Empfehlung (damit es skalierbar bleibt)
Baut das als Regelwerk + Mappingtabellen, nicht hardcodiert.
(A) payment_method_counteraccounts
• payment_method (payone, paypal, invoice, …)
• counteraccount_type (DEBITOR, GL_ACCOUNT)
• counteraccount_value (z. B. 1230)
(B) payone_debitor_mapping
• Schlüssel z. B. payone_account_id / merchant_id / settlement_reference
• Ziel: debitor_account_no
Fallback-Regeln 1. Wenn PayPal → 1230 2. Wenn Payone und Mapping gefunden → gemappter Debitor 3. Sonst → Sammeldebitor
4. „Zu klären“ (Kundennummer/Kreditorennummer) pragmatische Konzeption ohne Blocker
Ihr könnt das so designen, dass beides optional ist, aber unterstützt wird:
Option 1: Sammelkonten (schnell, wenig Stammdatenpflege)
• Gegenkonto Umsatz: Sammeldebitor
• Gegenkonto Provision: Sammelkreditor/71586
• Vorteil: einfacher Start
• Nachteil: keine OP-Auswertung pro Kunde in DATEV
Option 2: echte Debitoren/Kreditoren (sauberer, mehr Pflege)
• Jeder Kunde bekommt Debitorennummer (und ggf. Kreditorennummer, wenn Provisionen individuell laufen sollen)
• Optional zusätzlich Export „Debitoren/Kreditoren“-Stammdaten in DATEV-Format (separater EXTF-Datensatztyp)
Empfehlung für eure Roadmap
• Phase 1: Sammelkonten + Payone-Mapping + PayPal 1230
• Phase 2: Debitoren/Kreditoren optional (wenn Steuerberater OP-Listen braucht)
Ist geklärt. Option 1 Wird umgesetzt. Zusätzlich wird immer wie in Phase 1 noch das Payone-Mapping + PayPal 1230 etc angahangen.
5. Storno / Korrekturen / Gutschriften: robustes Regelwerk
Ihr wollt verhindern, dass „Storno“ doppelt wirkt oder als falsches Vorzeichen rausgeht.
Konzeptionell sauber:
• Jede exportierte Zeile bekommt eine interne Export-Signatur (z. B. source_type, source_id, line_hash) und wird als „exportiert“ protokolliert.
• Storno/Gutschrift wird als eigene Buchung exportiert (typischerweise Gegenbuchung zur Ursprungsbuchung), nicht als stilles Überschreiben.
DATEV-seitig gibt es Felder/Mechaniken für Umkehr/Korrektur; wie ihr das exakt nutzt (eigener Umkehrschlüssel vs. negativer Betrag) sollte ihr einmal mit dem Steuerberater festziehen, aber euer Modul kann beides abbilden:
• Variante A: negativer Umsatzbetrag in Spalte A
• Variante B: Umkehr-/Berichtigungsschlüssel befüllen (wenn gewünscht)
(Die DATEV-Doku zum Buchungsstapel beschreibt die Struktur/Spalten; die konkrete Kanzlei-Konvention ist oft Mandantenstandard.)
6. Datenmodell in Laravel (minimal, aber vollständig)
6.1 Kern-Tabellen
datev_exports
• id, period_from, period_to, created_by
• status (draft/generated/downloaded/locked)
• berater_nr, mandant_nr (für Header)
• filename, file_path, hash
datev_export_lines
• export_id
• source_type (invoice/credit_note/cancellation/commission)
• source_id
• amount_gross
• soll_haben (H/S)
• konto
• gegenkonto
• bu_schluessel
• belegdatum
• belegfeld1
• buchungstext
• ustid, eu_land
• row_csv (optional: final gerenderte Zeile zur Nachvollziehbarkeit)
accounting_rules (konfigurierbar)
• für Umsatz: VAT-Case → (konto, bu)
• für Provision: scenario → (konto, bu)
counteraccount_mappings (Payone/PayPal/Default)
6.2 Warum „Export Lines“ speichern?
• Audit-Trail (Steuerberaterfragen)
• Re-Download exakt identisch
• Sperre gegen Doppel-Export derselben Quellen
7. UI/Workflow (CRM-Modul) 1. Periode wählen (Monat/Zeitraum) 2. Datenbasis anzeigen: Anzahl Rechnungen, Gutschriften, Stornos, Provisionen 3. Regel-Preview: gruppiert nach (Konto, Gegenkonto, Steuerschlüssel) + Summen 4. Validierungscheck (Blocking):
• fehlender Steuercase (z. B. EU ohne USt-ID aber als IG markiert)
• fehlendes Payone-Debitor-Mapping (falls Pflicht)
• fehlendes Belegdatum/Belegnr. 5. Export generieren → Datei + Protokoll 6. Lock (optional) → „Dieses Periodenset ist final“
8. CSV/Format-Generator (technische Konzeption, ohne Code)
• Semikolon als Delimiter
• Headerzeile gemäß DATEV-Vorgaben (Formatkategorie 21 = Buchungsstapel, Versionen etc.)
• Danach Spaltenkopfzeile (fixe Reihenfolge)
• Dann Zeilen mit exakt derselben Spaltenanzahl (leere Felder als leer zwischen ;)
Praxis-Hinweis: Haltet Header-Felder (Berater-Nr, Mandant-Nr, Zeitraum) als Kanzlei-Konfiguration im CRM, damit ihr nicht pro Export „handwerkelt“. (Gerade diese Angaben sind beim Import relevant.)
9. Konkrete Regel-Engine (so entscheidet ihr automatisch)
Umsatz-Fallunterscheidung
Input: invoice.vat_rate, invoice.destination_country, invoice.customer_vat_id, invoice.tax_exemption_reason
Mapping:
• vat_rate == 19% → (8400, bu=9)
• vat_rate == 7% → (8300, bu=8)
• Drittland steuerfrei → (8120, bu=11)
• EU IG Lieferung steuerfrei → (8125, bu=1)
Provision-Fallunterscheidung
Input: commission.type (shop/payline/bonus), supplier_tax_status (normal/KU/RC)
• type shop|bonus → konto 4760
• type payline → konto 4764
• tax_status normal → bu 9
• KU → bu 50
• RC → bu 94
10. Was ich aus eurer Beispieldatei ableite (für die Konzeption wichtig)
Eure Datei nutzt exakt das typische Muster:
• Zeile 1: EXTF;700;21;Buchungsstapel;...
• Zeile 2: Spaltenüberschriften (u. a. „Umsatz (ohne Soll/Haben-Kz)“, „Soll/Haben-Kennzeichen“, „Konto“, „Gegenkonto“, „BU-Schlüssel“, „Belegdatum“, …)
• Danach Datenzeilen mit vielen leeren Feldern (DATEV-typisch bei Minimalbefüllung)
Das bestätigt: Ihr braucht vor allem stabile Spaltenpositionen + korrektes Mapping, nicht „alle 116 Felder“.
Wenn du willst, kann ich als nächsten Schritt (ohne extra Rückfragen) aus eurem Briefing ein konkretes Mapping-Dokument erstellen (als technische Spezifikation):
• Feld-zu-Quelle (CRM) je DATEV-Spalte
• Regelprioritäten (Fallbacks)
• Validierungsregeln + Fehlermeldungen (für UI)
• Testfälle (z. B. EU ohne USt-ID, Storno nach Periodenwechsel, Payone ohne Mapping, KU/RC-Provisionen)