Files
2026-09-09 16:55:08 +02:00

43 lines
1.7 KiB
PHP

<?php
namespace App\EventPaymentModules;
use App\EventPaymentModules\DTO\TransactionMatch;
use App\Models\EventParticipant;
use App\ValueObjects\BankTransaction;
use Illuminate\Support\Collection;
/**
* Fähigkeit: Dieses Zahlungsmodul kann Umsätze eines Kontoauszugs verwerten.
*
* Hier stecken die drei Entscheidungen, die von der Zahlungsart abhängen -- und nur diese:
* was zählt, wem es gehört, was nachgetragen wird. Der Ablauf drumherum (Upload, Parsen, Kandidaten
* laden, Wasserzeichen, `amount_paid` fortschreiben, Mail) ist zahlartneutral und liegt in der Action.
*
* Die Überweisung erkennt Gutschriften am Verwendungszweck; eine SEPA-Lastschrift wird später
* Belastungen und Rücklastschriften über die Mandatsreferenz erkennen -- gleiche Datei, andere Regeln.
*/
interface ReadsBankStatements
{
/** Interessiert dieser Umsatz diese Zahlungsart? */
public function isRelevantTransaction(BankTransaction $transaction): bool;
/**
* Zu welcher Anmeldung gehört der Umsatz?
*
* `null`, wenn keine oder mehrere passen -- ein unsicherer Vorschlag wäre schlimmer als keiner,
* weil er in der Prüfansicht bloß durchgewinkt würde.
*
* @param Collection<int, EventParticipant> $candidates fertig geladen; hier wird nichts abgefragt
*/
public function matchTransaction(BankTransaction $transaction, Collection $candidates): ?TransactionMatch;
/**
* Trägt die zahlartspezifischen Spuren des Umsatzes an der Anmeldung ein.
*
* Setzt nur die Attribute, **speichert nicht** -- gespeichert wird einmal am Ende durch die Action,
* zusammen mit dem Betrag.
*/
public function recordTransaction(EventParticipant $participant, BankTransaction $transaction): void;
}