Nebenkostenabrechnung automatisieren: Von Rechnung bis Beilage
Eine Nebenkostenabrechnung lässt sich durchgängig automatisieren, wenn Rechnungen mit Kostenart und Zeitraum erfasst, nach festen Schlüsseln umgelegt und daraus die Beiblätter erzeugt werden. Zuordnung und Freigabe prüft weiter ein Mensch.
In vielen Hausverwaltungen entsteht die Betriebskostenabrechnung einmal im Jahr in einer Tabellenkalkulation: Rechnungen werden abgetippt, Schlüssel per Formel angewendet, Beiblätter per Serienbrief erzeugt. Das funktioniert, bis sich eine Wohnfläche ändert, ein Mieter mitten im Jahr auszieht oder eine Rechnung zwei Jahre betrifft. Dann stimmt die Summe nicht mehr, und niemand weiß, in welcher Zelle der Fehler liegt.
Eine Software kann denselben Weg in festen Schritten gehen: erfassen, prüfen, umlegen, Beiblatt erzeugen. Unten stehen diese Schritte, eine centgenaue Umlage nach Wohnfläche als PHP-Beispiel und die Stellen, an denen ein Mensch entscheidet. Wann aus dem Abrechnungsweg eine eigene Automatisierung wird und welche Teile davon Standardsoftware abdeckt, besprechen wir auf der Seite zur Prozessautomatisierung.
Datenfluss
Der Datenfluss in einer Hausverwaltung
Am Anfang stehen drei Arten von Daten: Stammdaten, Rechnungen und Messwerte. Die Stammdaten beschreiben Gebäude, Einheiten, Wohnflächen, Mietverhältnisse mit Beginn und Ende, Vorauszahlungen und den vereinbarten Umlageschlüssel je Kostenart. Rechnungen bringen die Kosten, Messwerte den Verbrauch für Wasser, Wärme oder Strom.
Daraus folgt ein fester Ablauf je Abrechnungszeitraum:
Rechnungen erfassen, einer Kostenart und einem Leistungszeitraum zuordnen.
Rechnungen gegen Kontrollwerte prüfen und freigeben.
Kosten je Kostenart sammeln und auf den Abrechnungszeitraum abgrenzen.
Kosten nach Schlüssel auf Einheiten und Mietverhältnisse verteilen.
Vorauszahlungen gegenrechnen, Beiblatt je Mieter erzeugen, freigeben, versenden.
Wie Zählerstände sauber ins System kommen, ist ein eigenes Thema; die Architektur dafür steht unter Messdaten aus Gebäuden sammeln, die Erfassung vor Ort ohne Netz unter Offline-fähige App für Außendienst.
Diesen Weg bildet imm smartControl ab, eine Hausverwaltungs-Software, an der wir für die imm INNOVATION GmbH & Co. KG seit August 2021 arbeiten. Sie deckt den Pfad von der Mieter-Stammdatei bis zur Nebenkosten-Beilage ab: Eingangsrechnungen werden mit Kontrollwerten plausibilisiert, fließen in Ausgangsrechnungen mit automatischer Aufteilung auf Mieter, und aus den verbuchten Rechnungen werden Nebenkosten-Beiblätter abgeleitet.
Schritt 1 und 2
Eingangsrechnungen erfassen und plausibilisieren
Wie Rechnungen aus Postfach, PDF und E-Rechnung ins System kommen und freigegeben werden, steht unter Eingangsrechnungen automatisch verarbeiten. Für die Nebenkosten zählen danach drei Angaben je Rechnung, die eine reine Buchhaltung nicht braucht.
Kostenart nach Betriebskostenverordnung. § 2 BetrKV zählt 17 Arten auf, von der Grundsteuer (Nr. 1) über Wasser, Heizung, Aufzug, Müll, Gebäudereinigung, Gartenpflege, Beleuchtung und Versicherung bis zu sonstigen Betriebskosten (Nr. 17). Jede Rechnung oder Rechnungsposition bekommt genau eine davon.
Umlagefähigkeit. Verwaltungskosten sowie Instandhaltungs- und Instandsetzungskosten gehören nach § 1 Abs. 2 BetrKV nicht zu den Betriebskosten. Eine Hauswartsrechnung mit einem ausgetauschten Türschloss enthält deshalb einen Teil, der nicht umgelegt werden darf. Die Software sollte Rechnungen in Positionen teilen können, statt nur ganze Belege zuzuordnen.
Leistungszeitraum. Eine Versicherungsprämie von Juli bis Juni betrifft zwei Abrechnungsjahre. Wird der Zeitraum mit erfasst, kann das System die Kosten zeitanteilig abgrenzen.
Als Kontrollwerte eignen sich Summen und Vergleiche, die ein Programm ohne Ermessen prüfen kann: Rechnungsbetrag gleich Summe der Positionen, Leistungszeitraum innerhalb oder überlappend mit dem Abrechnungsjahr, Abweichung je Kostenart zum Vorjahr über einer festgelegten Schwelle, doppelte Rechnungsnummern eines Lieferanten.
Schritt 3 und 4
Umlage auf Einheiten und Mieter
Haben die Vertragsparteien nichts anderes vereinbart, werden Betriebskosten nach dem Anteil der Wohnfläche umgelegt (§ 556a Abs. 1 Satz 1 BGB). Kosten, die von erfasstem Verbrauch oder erfasster Verursachung abhängen, sind nach einem Maßstab umzulegen, der dem unterschiedlichen Verbrauch Rechnung trägt (Satz 2). Bei vermietetem Wohnungseigentum gilt ohne andere Vereinbarung der Maßstab, nach dem die Wohnungseigentümer untereinander verteilen, solange er nicht billigem Ermessen widerspricht (§ 556a Abs. 3). Für Heizung und Warmwasser gilt zusätzlich die Heizkostenverordnung, nach der zum Beispiel mindestens 50 und höchstens 70 Prozent der Heizkosten nach erfasstem Verbrauch zu verteilen sind (§ 7 Abs. 1 HeizkostenV).
Bei der Umlage nach Fläche entsteht ein Rundungsproblem. Wer jeden Anteil auf Cent rundet, bekommt in der Summe oft einen Cent zu viel oder zu wenig. Die Abrechnung geht dann nicht auf, und je nach Rundung zahlen die Mieter zusammen mehr, als die Rechnung betrug.
Das Beispiel unten löst das mit festen Regeln:
Beträge in Cent und Flächen in Quadratdezimetern, also nur ganze Zahlen ohne Gleitkomma-Fehler.
Jeder Anteil wird zunächst abgerundet.
Die fehlenden Cent gehen einzeln an die Einheiten mit dem größten Divisionsrest (Verfahren des größten Rests).
Bei gleichem Rest bekommt die Einheit mit der kleineren Kennung den Cent. So liefert jeder Lauf mit denselben Daten dasselbe Ergebnis.
Ein Rechenbeispiel mit angenommenen Werten: Die Gebäudeversicherung kostet 1.234,57 Euro. Vier Wohnungen haben 48,50, 61,20, 73,90 und 92,40 Quadratmeter, zusammen 276,00 Quadratmeter. Wohnung W01 hat damit einen Anteil von 48,50 / 276,00, also 1.234,57 Euro mal 0,17572, rechnerisch 216,944 Euro, abgerundet 216,94 Euro. Für W02 bis W04 ergeben sich abgerundet 273,75, 330,56 und 413,31 Euro. Die vier abgerundeten Anteile ergeben 1.234,56 Euro; ein Cent fehlt. Die Divisionsreste betragen in Cent 0,437 (W01), 0,248 (W02), 0,059 (W03) und 0,257 (W04). W01 hat den größten Rest und zahlt 216,95 Euro. Die Summe ist danach genau 1.234,57 Euro.
Steht eine Wohnung leer, zählt ihre Fläche trotzdem zur Gesamtfläche, weil § 556a Abs. 1 auf den Anteil der Wohnfläche abstellt; ihren Anteil trägt der Vermieter. Wechselt der Mieter im Jahr, lässt sich der Anteil der Einheit in einem eigenen Schritt danach nach Tagen auf die Mietverhältnisse aufteilen. Die Funktion unten verteilt nur nach Fläche; Leerstand ist dort eine Einheit wie jede andere. Gutschriften, etwa eine Erstattung des Versorgers, verteilt sie mit demselben Verfahren und negativem Vorzeichen, sodass auch eine Gutschrift centgenau aufgeht. Jede Fläche prüft sie einzeln: Eine negative oder nicht ganzzahlige Fläche lehnt sie ab, auch wenn die Summe aller Flächen stimmt.
Ausgeführt mit PHP 8.5; die Ausgabe des Beispiels lautet 216,95, 273,75, 330,56 und 413,31 EUR, Summe 1.234,57 EUR. Geprüft außerdem: eine Gutschrift über -1.234,57 EUR (dieselben Anteile mit Minus, Summe genau), eine negative Fläche und eine Gesamtfläche von null (beide abgelehnt).
<?php
declare(strict_types=1);
/**
* Splits one cost item (in cents) across units by floor area.
* Areas are given in square decimetres (1 m² = 100 dm²), so only integers are used.
* Leftover cents go to the units with the largest remainder;
* on equal remainders the lower unit key wins.
* A negative amount (credit note, refund) is split the same way with a negative sign.
*
* @param array<string, int> $areas unit => floor area in dm²
* @return array<string, int> unit => share in cents
*/
function allocateByArea(int $amountCents, array $areas): array
{
foreach ($areas as $unit => $area) {
if (! is_int($area) || $area < 0) {
throw new InvalidArgumentException("Area of unit {$unit} must be a whole number of dm², zero or more.");
}
}
$totalArea = array_sum($areas);
if ($totalArea === 0) {
throw new InvalidArgumentException('Total area must be greater than zero.');
}
$sign = $amountCents < 0 ? -1 : 1;
$amount = abs($amountCents);
$shares = [];
$remainders = [];
foreach ($areas as $unit => $area) {
$product = $amount * $area;
$shares[$unit] = intdiv($product, $totalArea); // rounded down
$remainders[$unit] = $product % $totalArea; // remainder of the division
}
$leftover = $amount - array_sum($shares);
$order = array_keys($remainders);
usort($order, fn ($a, $b) => [$remainders[$b], $a] <=> [$remainders[$a], $b]);
foreach (array_slice($order, 0, $leftover) as $unit) {
$shares[$unit]++;
}
return array_map(fn (int $cents): int => $sign * $cents, $shares);
}
// Example: building insurance 1,234.57 euros, four flats
$areas = ['W01' => 4850, 'W02' => 6120, 'W03' => 7390, 'W04' => 9240];
$shares = allocateByArea(123457, $areas);
$euro = fn (int $cents): string => number_format($cents / 100, 2, ',', '.');
foreach ($shares as $unit => $cents) {
printf("%s %s m² %8s EUR\n", $unit, number_format($areas[$unit] / 100, 2, ',', '.'), $euro($cents));
}
printf("Total %8s EUR\n", $euro(array_sum($shares)));
Schritt 5
Beiblätter automatisch erzeugen
Das Beiblatt ist der Teil, den der Mieter liest. Es sollte für jede Kostenart die Gesamtkosten des Gebäudes, den Schlüssel, die Gesamtmenge (etwa 276,00 Quadratmeter), den Anteil der Einheit und den daraus folgenden Betrag zeigen. Darunter stehen die Summe, die geleisteten Vorauszahlungen und die Nachzahlung oder das Guthaben. Mit diesen Angaben kann der Mieter jede Zeile mit dem Taschenrechner nachvollziehen.
Für die Erzeugung zählen drei Dinge. Erstens wird das Beiblatt aus denselben gespeicherten Zahlen gerechnet, die auch in der Buchhaltung stehen, nicht aus einer zweiten Rechnung im Druckprogramm. Zweitens bekommt jedes Beiblatt eine Version: Wird nach dem Versand eine Rechnung korrigiert, entsteht ein neues Beiblatt, das alte bleibt nachvollziehbar erhalten. Drittens liegen die Belege griffbereit, denn der Mieter darf nach § 556 Abs. 4 BGB Einsicht in die Belege verlangen; der Vermieter darf sie elektronisch bereitstellen.
Die Fristen stehen in § 556 Abs. 3 BGB: Die Abrechnung muss dem Mieter spätestens bis zum Ablauf des zwölften Monats nach Ende des Abrechnungszeitraums mitgeteilt werden, sonst ist eine Nachforderung ausgeschlossen, außer der Vermieter hat die Verspätung nicht zu vertreten. Für den Abrechnungszeitraum 01.01. bis 31.12.2025 endet diese Frist am 31.12.2026. Einwendungen muss der Mieter bis zum Ablauf des zwölften Monats nach Zugang der Abrechnung mitteilen, mit derselben Ausnahme für unverschuldete Verspätung. Eine Software kann beide Fristen je Gebäude und Mietverhältnis überwachen.
Technisch ist das Beiblatt meist eine PDF-Datei. Bei imm smartControl laufen dafür drei Schienen nebeneinander: DomPDF für klassische HTML-Vorlagen, Spatie-PDF mit Headless-Chromium für aufwendigere Layouts und ein PDF-Merger für mehrteilige Dokumente.
Kontrolle
Wo der Mensch prüfen sollte
Ein Programm verteilt zuverlässig, was ihm korrekt übergeben wird. Die Entscheidungen davor bleiben bei Menschen:
Zuordnung: Ist eine Position umlagefähig, und zu welcher Kostenart gehört sie? Das Türschloss in der Hauswartsrechnung ist erst sicher ausgesondert, wenn ein Mensch die Position so erfasst oder bestätigt hat.
Schlüssel: Weicht der Mietvertrag vom gesetzlichen Flächenschlüssel ab, muss das in den Stammdaten stehen; eine Änderung zugunsten eines Verbrauchsmaßstabs ist nach § 556a Abs. 2 BGB nur vor Beginn eines Abrechnungszeitraums und in Textform möglich.
Ausreißer: Meldet der Vorjahresvergleich eine Abweichung, klärt ein Mensch, ob ein Rohrbruch, eine Tarifänderung oder ein Erfassungsfehler dahintersteckt.
Stammdaten: Wohnflächen, Ein- und Auszugsdaten und Vorauszahlungen werden vor dem Lauf geprüft, weil jeder Fehler dort in alle Beiblätter wandert.
Freigabe: Vor dem Versand sieht jemand Gesamtsummen je Kostenart und Stichproben einzelner Beiblätter durch.
Das Programm übernimmt die Rechnung und die Kontrolle der Summen. Ob die Abrechnung inhaltlich stimmt, bleibt eine fachliche Entscheidung der Verwaltung.
Abrechnung
Häufige Fragen
-
Nein. Rechnen, Abgrenzen, Verteilen und Beiblätter erzeugen kann sie ohne Eingriff. Ob eine Position umlagefähig ist, welcher Schlüssel laut Mietvertrag gilt und ob ein Ausreißer echt ist, entscheidet weiter ein Mensch, und vor dem Versand gibt jemand die Abrechnung frei.
-
Die Summe aller Anteile muss je Kostenart genau dem umgelegten Betrag entsprechen, die Summe der Einheitenflächen der Gesamtfläche des Gebäudes. Dazu kommen der Vergleich je Kostenart zum Vorjahr mit einer festgelegten Schwelle, die Prüfung, ob der Leistungszeitraum einer Rechnung ins Abrechnungsjahr fällt, und die Suche nach doppelten Rechnungsnummern. Jeder Treffer landet auf einer Prüfliste statt im Beiblatt.
Abrechnung noch in der Tabellenkalkulation?
Schreiben Sie die fünf Schritte des Abrechnungswegs für Ihre Verwaltung auf und markieren Sie, wo bisher abgetippt oder per Formel kopiert wird. Mit dieser Liste lässt sich im Workflow-Check auf der Seite zur Prozessautomatisierung klären, ob eine Automatisierung trägt.
Nachweise
Quellen und Stand
Stand: 27.08.2026. Beschrieben sind die gesetzlichen Regeln zu diesem Datum; keine Rechtsberatung. Der PHP-Code ist ein Beispiel zur Erläuterung und zeigt nicht, wie imm smartControl intern rechnet.
Artikel teilen