=== Beitrag Steward — Mitgliedsbeiträge & SEPA-Lastschrift für Vereine ===
Contributors: migkapa
Tags: sepa, verein, mitgliedsbeitrag, lastschrift, pain.008
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 0.1.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Membership dues for German Vereine: SEPA direct-debit files your bank accepts after 15 November 2026, a file checker, and PDF statements.

== Description ==

From 15 November 2026, German banks stop accepting SEPA files in the old format versions (pain.008.002.02, .003.02 and .001.02, per DFÜ-Abkommen Anlage 3, v26.11), and structured addresses become mandatory. If your Verein collects its Mitgliedsbeiträge with an Excel converter, an old desktop tool or aging software, your next Beitragslauf may simply be refused, and the bank's error message will not tell you why.

Beitrag Steward does two things about that:

* **It checks any SEPA file.** Upload a pain.008 file from whatever tool you use today and see, before your bank does, whether it will be accepted, whether it dies on 15 November 2026, and what exactly is wrong: a failed IBAN check digit, a control sum that does not add up, a missing mandate date, an address the new rules will not allow. The check runs entirely on your own server.
* **It runs your Beitragslauf.** Keep the member list with mandate reference, signature date and fee, pick a collection date, and download a pain.008.001.08 file ready for your online banking. Every file is validated before you ever see it, first collections are marked FRST and switch to RCUR by themselves, and names like "Müller" arrive at the bank as "Mueller" instead of losing letters.

Also included: a PDF Beitragsbescheinigung per member, on your Verein's letterhead.

A few decisions worth knowing about:

* Member IBANs are stored encrypted and displayed masked. Nothing is ever transmitted off your server — there is no external service behind this plugin.
* The plugin refuses to generate a broken file. If a member's data is incomplete, you get a list of what to fix, not an XML file that bounces at the bank with a fee per returned debit.
* Deleting the plugin keeps your member and run records. They are business records for money you have already collected.

= Für deutsche Vereine =

Beitrag Steward verwaltet Mitglieder samt SEPA-Mandat (Mandatsreferenz, Unterschriftsdatum, FRST/RCUR), erzeugt die pain.008.001.08-Datei für das Online-Banking und prüft auch Dateien aus anderen Programmen: IBAN-Prüfziffern, Kontrollsummen, Mandatsangaben, strukturierte Adressen und die ab dem 15. November 2026 geltenden Formatversionen. Die Gläubiger-ID beantragt Ihr Verein kostenlos bei der Bundesbank; das Plugin selbst zieht kein Geld ein, es erstellt die Datei, die Sie bei Ihrer Bank einreichen.

Bankdaten der Mitglieder werden verschlüsselt auf Ihrem eigenen Server gespeichert und verlassen Ihre Website nicht — relevant für die DSGVO und kirchliche Datenschutzvorgaben (DSG-EKD, KDG).

Bitte prüfen Sie den ersten Beitragslauf mit einem kleinen Testbetrag, bevor Sie den gesamten Bestand einziehen.

== Frequently Asked Questions ==

= Does the plugin collect the money? =

No. It produces the XML file your bank needs and checks it. You upload the file in your online banking, as before. The plugin never touches the payment itself, which also means there is no payment license involved and no third party in the flow.

= Which file version does it generate? =

pain.008.001.08 — the ISO 20022 2019 version that German banks require for submissions from 15 November 2026, and that they already accept today.

= What happens to member IBANs? =

They are encrypted with a key derived from this site's authentication salts and shown masked (first four and last four characters) everywhere in the admin. One consequence to know: if you rotate your WordPress salts, stored IBANs become unreadable and must be entered again.

= Can it check files from other software? =

Yes. The file check accepts any pain.008 file, whatever produced it. That is the recommended first step if you currently use another tool and want to know whether the November 2026 change affects you.

= My bank rejected a file anyway. What now? =

The check covers the format rules and the common content mistakes, but a bank can also reject for account-side reasons the file cannot show: no direct-debit agreement (Inkassovereinbarung) on the account, a blocked mandate, or a collection date without enough lead time. The error list in the plugin tells you which side the problem is on.

== Screenshots ==

1. The member list with masked IBANs, mandate data and fees.
2. A collection run: pick the date, get a validated pain.008.001.08 file.
3. The SEPA file check, with findings sorted by severity — including what breaks on 15 November 2026.

== Changelog ==

= 0.1.2 =
* Fix: collection runs were not saved on MySQL/MariaDB in strict mode (the run record's message ID exceeded 35 characters), so the "Previous runs" list stayed empty and the generated file could not be downloaded. Runs now store the same MsgId that is written into the XML, and a failed save is reported instead of showing success.
* Fix: names with letters outside the umlaut map (e.g. Turkish ı, Polish ł, Spanish ñ) lost the letter in the SEPA file; they are now transliterated to the base letter.
* File check findings are listed by severity: rejections first, then 15 November 2026 issues, warnings, info.

= 0.1.1 =
* Review feedback: all functions, classes, constants, options, transients, tables and hooks now use the bstew_/BSTEW_ prefix; translation files removed from the package (handled by translate.wordpress.org).

= 0.1.0 =
* First release: member and mandate registry with encrypted IBANs, pain.008.001.08 generation with built-in validation, SEPA file check for foreign files, PDF Beitragsbescheinigung.
