DATEV: stornierte Rechnungen im Rechnungsmonat, Pruefliste fuer den Steuerberater

- Eine spaeter stornierte Rechnung fehlte im Export ihres Rechnungsmonats,
  weil cancellation = true auch an der Originalrechnung steht. Sie bleibt
  jetzt als Erloes im Rechnungsmonat; die Stornierung wird im Monat des
  Stornobelegs gegengebucht (nur Belege ohne cancellation_id).
- Pruefliste je Buchungsstapel als CSV (Button im Steuerberater-Bereich):
  Belege, die sich ohne Zusatzinformation nicht abstimmen lassen (doppelte
  Rechnungsnummern, Stornos ausserhalb des Systems).
- Korrespondenz und offene Differenzen mit dem Steuerberater unter
  dev/2026-07-17-steuern/.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-09-23 15:42:54 +00:00
parent d01b9bca3a
commit 1a3af17f9a
12 changed files with 1058 additions and 7 deletions

View file

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\DatevExport;
use App\Models\DatevExportLine;
use App\Services\DatevExportService;
use App\Services\DatevReconciliationService;
use App\Services\HTMLHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
@ -132,6 +133,26 @@ class PaymentTaxAdvisorController extends Controller
]);
}
/**
* Prüfliste zum Buchungsstapel als CSV herunterladen.
*
* Enthält die Belege, die der Steuerberater nicht ohne Zusatzinformation abstimmen
* kann (Altfälle wie doppelte Rechnungsnummern oder Stornos außerhalb des Systems).
*/
public function checklist($id)
{
$export = DatevExport::findOrFail($id);
$csv = app(DatevReconciliationService::class)->buildCsv($export->month, $export->year);
$filename = sprintf('DATEV_Pruefliste_%04d_%02d.csv', $export->year, $export->month);
return response($csv, 200, [
'Content-Type' => 'text/csv; charset=utf-8',
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
]);
}
/**
* DataTable: Export-Lines eines bestimmten Exports.
*/