Rechnungen
Rechnungsvorlagen
Ein Rechnungstemplate (InvoiceTemplate) beschreibt, welche Posten in welcher Reihenfolge auf den Jahresrechnungen eines Vereins erscheinen. Pro Verein und Abrechnungsjahr gibt es genau ein Template. Das Template steuert die Berechnung — die Rechenlogik liest ausschließlich das Template, es gibt keine fest codierten Positionen.
Nur Administratoren und Vorstandsmitglieder können Rechnungstemplates einsehen. Die Verwaltungsoberfläche (Drag-and-drop-Editor) wird in einem späteren Schritt unter Administration → Rechnungsvorlagen bereitgestellt.
#Aufbau der Template-Konfiguration
Das Template speichert seine Struktur als JSON-Objekt im Feld config. Die Grundstruktur:
1{
2 "mode": "combined",
3 "invoices": [
4 {
5 "type": "lease",
6 "label": "Jahresrechnung",
7 "sections": [
8 {
9 "id": "pacht",
10 "label": "Pacht",
11 "items": [
12 { "type": "base_rent", "position": 1 },
13 { "type": "public_legal_rate", "position": 2 }
14 ]
15 }
16 ]
17 }
18 ]
19}
| Feld | Beschreibung |
|---|---|
mode |
combined oder separate — bestimmt ob eine oder zwei Rechnungen pro Parzelle erzeugt werden |
invoices |
Array mit einem Eintrag (combined) oder zwei Einträgen (separate) |
invoices[].type |
lease für Pacht-/Gebührenrechnung, water für Wasserrechnung |
invoices[].sections |
Abschnitte der Rechnung mit Label und Positionsliste |
items[].type |
Positionstyp aus InvoiceLineItemTypeEnum (siehe unten) |
items[].position |
Anzeigereihenfolge innerhalb des Abschnitts |
items[].addon_id |
Nur für Typ addon: UUID des verknüpften RentPaymentAddOn-Eintrags |
Im Modus separate enthält das invoices-Array zwei Einträge: einen mit "type": "lease" und einen mit "type": "water". Der Wasserabschnitt erscheint dann nur in der Wasserrechnung.
#Verfügbare Positionstypen
#Pacht
| Typ | Bezeichnung | Berechnung |
|---|---|---|
base_rent |
Pacht | (Parzellenfl. + Gemeinschaftsfl.) × Pachtsatz |
public_legal_rate |
Öffentl.-rechtliche Lasten | (Parzellenfl. + Gemeinschaftsfl.) × Satz |
Die Pacht ist ein einziger Posten für die Gartenfläche inkl. Gemeinschaftsflächenanteil. Es gibt keine separaten Posten für Hausfläche, Schuppen oder Gewächshaus.
#Verbands- und Vereinsbeiträge
| Typ | Bezeichnung | Berechnung |
|---|---|---|
federation_bv_fee |
Verbandsbeitrag BV | BV-Satz × Mitgliederzahl; entfällt bei Freistellung |
federation_lv_fee |
Verbandsbeitrag LV | LV-Satz × Mitgliederzahl; entfällt bei Freistellung |
membership_fee_first |
Vereinsbeitrag 1. Mitglied | Mitgliedsbeitrag × 12 (jährlich) |
membership_fee_others |
Vereinsbeitrag weitere Mitglieder | Weitere-Mitglieds-Beitrag × 12 × (aktive Mitglieder − 1) |
#Feste und variable Gebühren
| Typ | Bezeichnung | Berechnung |
|---|---|---|
winter_service |
Winterdienst | Pauschalbetrag pro Parzelle |
working_hours_fee |
Abgeltung Arbeitsstunden | Fehlstunden × Stundensatz; nur wenn Fehlstunden > 0 |
waste_fee |
Müllgebühren | Aus Waste/WasteCommunity-Einträgen; nur wenn Feature Müll aktiv |
addon |
(benutzerdefiniert) | Betrag × Anzahl (Parzelle oder Mitglied); erfordert addon_id im Template |
working_hours_feeist nur verfügbar, wenn das Feature Arbeitsstunden aktiv ist.waste_feesetzt das Feature Müll voraus. Alle Wasserposten setzen das Feature Wasser voraus.
#Überträge aus dem Vorjahr
| Typ | Bezeichnung | Berechnung |
|---|---|---|
open_balance_prev_year |
Offener Betrag [Jahr−1] | Summe unbeglichener Belastungszahlungen aus dem Vorjahr |
credits_prev_year |
Guthaben/Vorauszahlungen [Jahr−1] | Summe ungenutzter Guthabenzahlungen aus dem Vorjahr (negativer Wert) |
#Wasserposten
| Typ | Bezeichnung | Berechnung |
|---|---|---|
water_usage |
Trinkwasser | Verbrauch (m³) × Wasserpreis/m³; Mehrwertsteuer wird auf Rechnungsebene aufgeschlagen |
water_wastewater_levy |
Fäkalienumlage / Abwasser | Verbrauchskosten × Abwasserprozentsatz |
water_meter_fee |
Zählergebühr | Pauschalbetrag pro Parzelle |
water_meter_difference |
Messdifferenz | Differenz bei nicht übereinstimmenden Zählerständen; nur wenn > 0 |
water_prepayment_deduction |
Abzügl. Vorauszahlung [Jahr−1] | Vorauszahlungsbetrag des Vorjahres als negativer Posten |
#Zusatzposten (Add-ons)
RentPaymentAddOn-Einträge erlauben vereinsspezifische Posten (z. B. Versicherung, Kulturgebühr, Zeitung). Jedes Add-on hat:
| Feld | Beschreibung |
|---|---|
| Name | Anzeigename auf der Rechnung |
| Betrag | Betrag in Cent |
| Bezug | plot (einmal pro Parzelle) oder member (einmal je aktivem Mitglied) |
| Gültig ab / bis | Optionaler Gültigkeitszeitraum; außerhalb davon ist das Add-on nicht wählbar |
Ein Add-on wird in das Template aufgenommen, indem ein Positionseintrag mit "type": "addon" und der entsprechenden addon_id eingefügt wird.
#Proratierung
Posten werden anteilig berechnet, wenn ein Mitglied das Pachtjahr nicht vollständig belegt oder eine Parzelle zeitweise zahlungsfrei gestellt ist. Es gibt zwei unabhängige Faktoren:
| Faktor | Basis |
|---|---|
membershipFactor |
Zeitraum, in dem das Mitglied die Parzelle als Erstbelegter nutzt |
paymentPeriodFactor |
Freistellungszeitraum der Parzelle (no_payment_from / no_payment_until) |
Der effektive Faktor ist min(membershipFactor, paymentPeriodFactor) und wird auf alle Geldposten angewendet. Der Arbeitsstunden-Ausgleich wird nicht proratiert — hier zählt nur die tatsächliche Fehlstundenzahl.
Weitere Details zur Berechnung finden Sie unter Rechnungen generieren.