Verbindlichkeiten aus Lieferungen und Leistungen (Accounts Payable, AP) sind das Geld, das Ihr Unternehmen seinen Lieferanten für Waren oder Dienstleistungen schuldet, die Sie bereits erhalten, aber noch nicht bezahlt haben. In der Buchhaltung werden Verbindlichkeiten aus Lieferungen und Leistungen als kurzfristige Verbindlichkeit in Ihrer Bilanz klassifiziert – ein Betrag, der in der Regel innerhalb des nächsten Jahres und oft innerhalb von 30 bis 60 Tagen fällig ist.
Dieses Konzept ist zentral für die periodengerechte Buchführung (Accrual Accounting), bei der Sie die Ausgabe und die entsprechende Verbindlichkeit in dem Moment erfassen, in dem eine Rechnung eintrifft, und nicht erst, wenn Sie tatsächlich das Geld senden. Dieser Leitfaden zeigt Ihnen, wie Sie den gesamten AP-Arbeitsablauf sauber und effizient mit dem Klartext-Buchhaltungstool Beancount verwalten können.
Kurzüberblick
Bevor wir ins Detail gehen, hier die wichtigsten Punkte:
- Verbindlichkeiten aus Lieferungen und Leistungen (AP) repräsentieren Ihre kurzfristigen Schulden gegenüber Lieferanten. Sie finden sie im Abschnitt
Liabilities(Verbindlichkeiten) Ihrer Bilanz. - Periodengerecht vs. Kassenbasis: AP ist ein Konzept, das nur existiert, wenn Sie Ihre Bücher auf periodengerechter Basis führen. Beancount unterstützt periodengerechte Arbeitsabläufe vollständig, und seine Weboberfläche Fava zeigt Ihre Verbindlichkeiten korrekt an.
- AP vs. AR: Es ist einfach: Verbindlichkeiten (Payables) sind, was Sie schulden, während Forderungen (Receivables, AR) das sind, was andere Ihnen schulden.
Wo AP in Beancount (und Fava) lebt
Um mit der Verfolgung von AP zu beginnen, müssen Sie zunächst ein Konto dafür in Ihrem Hauptbuch deklarieren. Eine gängige Konvention ist:
Liabilities:AccountsPayable
Sie können optional Unterkonten für wichtige Lieferanten anlegen (z. B. Liabilities:AccountsPayable:ForestPaintSupply).
In Fava erscheint dieses Konto in Ihrer Bilanz unter Liabilities. Sie können darauf klicken, um die Buchungen zu sehen, aus denen sich der Saldo zusammensetzt. Sie können dies sogar in Favas öffentlichem Beispiel-Hauptbuch in Aktion sehen, das ein Konto Liabilities:AccountsPayable enthält.
Vorzeichenkonvention: Beancount speichert Verbindlichkeitssalden als Haben (negative Zahlen). Ein Saldo von -500.00 USD auf Liabilities:AccountsPayable bedeutet, dass Sie 500 $ schulden. Der untenstehende Offene-Posten-Bericht kehrt das Vorzeichen mit -SUM(number) um, sodass jede unbezahlte Rechnung einen positiven offenen Betrag zeigt. Eine vollständig beglichene Rechnung summiert sich auf null und wird durch HAVING ausgeschlossen.
Beancount-Bausteine, die Sie verwenden werden
Ein robuster AP-Arbeitsablauf in Beancount basiert auf einigen Kernfunktionen:
- Konten: Sie verwenden hauptsächlich Ihr Konto
Liabilities:AccountsPayable, ein Cash-Konto wieAssets:Bank:Checkingund Ihre verschiedenen Aufwandskonten (z. B.Expenses:Supplies). - Metadaten: Sie können jedem Vorgang Schlüssel-Wert-Daten anhängen. Für AP verwenden Sie Metadaten wie
invoice:,due:,terms:unddocument:. Setzen Sieoption "documents"auf einen Ordner, damit Beancount Dateien dort finden kann; in Fava fügt das Ablegen einer Datei auf einer Journalzeile einendocument:-Metadateneintrag ein, und die Aktivierung vonplugin "fava.plugins.link_documents"verknüpft diese Einträge mit gefundenen Document-Direktiven. - Tags & Links: Verwenden Sie
#tags(wie#ap) zum einfachen Filtern und^links(wie^INV-10455), um eine Rechnung und ihre spätere Zahlung programmatisch zu verknüpfen. Dies erzeugt eine klare, prüfbare Spur im Journal – aber Links allein sind nicht ausreichend für die untenstehende Offene-Posten-Abfrage. - Abfragen (BQL): Beancounts SQL-ähnliche Abfragesprache (BQL) ermöglicht es Ihnen, leistungsstarke Berichte auszuführen, wie z. B. die Auflistung aller offenen Verbindlichkeiten sortiert nach Fälligkeitsdatum, direkt von der Befehlszeile mit
bean-queryoder auf Favas „Query“-Seite.
Rechnungsidentität (erforderlich für Offene-Posten-Abfragen): Jede Rechnung und jede begleichende Zahlung – vollständig, teilweise oder mit Frühzahlungsrabatt – muss dieselben invoice:- und due:-Transaktionsmetadaten sowie denselben ^link tragen. Die Abfrage gruppiert nach payee, any_meta('invoice') und any_meta('due'). Wenn eine Zahlung diese Schlüssel weglässt, landet ihre AP-Buchung in einer separaten (payee, null, null)-Gruppe und eine beglichene Rechnung erscheint weiterhin als offen. Halten Sie (payee, invoice) lieferantenübergreifend eindeutig. Optionale, nur auf Rechnungen vorkommende Felder wie terms: und document: müssen bei Zahlungen nicht wiederholt werden.
Kern-AP-Arbeitsablauf in Beancount
Die Verwaltung von AP in Ihrem Hauptbuch umfasst zwei oder drei wichtige Schritte: Erfassen der Rechnung, Bezahlen sowie manchmal die Behandlung von Teilzahlungen oder Rabatten.
1) Erfassen der Lieferantenrechnung (Dies erzeugt die Verbindlichkeit)
Zuerst buchen Sie die Ausgabe und erzeugen die Verbindlichkeit, wenn die Rechnung eintrifft.
; Optionally set your documents folder in your main Beancount file:
option "documents" "documents"
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
terms: "2/10, n/30"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USDDiese einzelne Buchung erreicht zwei entscheidende Dinge:
- Sie erkennt sofort die Ausgabe von 500 $ im richtigen Zeitraum (August) – einmalig. Buchen Sie die Ausgabe bei der Zahlung nicht erneut.
- Sie schreibt AP mit 500 $ gut (
-500.00 USD) und erfasst damit, dass Sie Forest Paint Supply diesen Betrag schulden.
Der Link ^INV-10455 zusammen mit den Metadaten invoice: / due: bilden die Identität der Rechnung. Jede spätere Zahlung dieser Rechnung muss alle drei wiederverwenden.
2) Bezahlen der Rechnung (Dies begleicht die Verbindlichkeit)
Wenn Sie die Rechnung bezahlen, erstellen Sie einen Vorgang, der Geld von Ihrem Bankkonto überweist, um die Verbindlichkeit zu begleichen. Kopieren Sie invoice: und due: von der Rechnung auf die Zahlung, damit beide Buchungen eine gemeinsame Abfragegruppe teilen.
a) Standardzahlung (kein Rabatt):
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USDDiese Buchung reduziert Ihren AP-Saldo um 500 $ und Ihren Girokontostand um denselben Betrag. Die Verbindlichkeit für diese Rechnung ist nun beglichen (die AP-Summe der Gruppe ist null). Die Ausgabe bleibt auf der August-Rechnung – die Zahlung berührt Expenses: nicht.
b) Frühzahlungsrabatt (z. B. „2/10, n/30“) – wählen Sie genau eine Methode:
Wenn die Bedingungen „2/10, n/30“ sind, können Sie einen Rabatt von 2 % erhalten, wenn Sie innerhalb von 10 Tagen zahlen. Für unsere 500-$-Rechnung sind das 10 $ Rabatt. Der untenstehende Block zeigt zwei sich gegenseitig ausschließende Alternativen: Option 1 ist aktiv; Option 2 ist vollständig auskommentiert, sodass ein Einfügen nicht beide buchen kann. Um stattdessen Option 2 zu verwenden, kommentieren Sie Option 1 aus und Option 2 ein. Lassen Sie niemals beide aktiv – das begleicht AP doppelt und erfindet einen zweiten 10-$-Vorteil. Ob Sie ein Ertrags- oder Aufwandskonto verwenden, ist eine buchhalterische Richtlinienentscheidung für Ihre Bücher; Beancount verlangt nicht das eine über das andere.
; Pick EXACTLY ONE of the two transactions below for a given invoice.
; Do not paste both into the same ledger — that clears AP twice.
; Option 1: Record the discount as other income
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Income:Discounts:Payables -10.00 USD
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Expenses:Supplies:Paint -10.00 USDIn jeder einzelnen Alternative begleichen Sie die volle Verbindlichkeit von 500 $, reduzieren Ihren Banksaldo um die tatsächlich gezahlten 490 $ und erfassen den 10-$-Vorteil. Ersetzen Sie die Standard-Vollzahlungstransaktion durch die gewählte Alternative – stapeln Sie keine Rabattzahlung auf die 500-$-Zahlung und kombinieren Sie diesen Block nicht mit Abschnitt 2a für dieselbe Rechnung.
3) Behandlung von Teilzahlungen
Verwenden Sie bei jeder Rate dieselbe Identität mit invoice: / due: / ^link, damit jede Zahlung dieselbe Offene-Posten-Gruppe reduziert.
; Invoice for $1,200
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD
; First payment of $400
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD
; Final payment of $800
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USDNach der ersten Zahlung beträgt die AP-Summe der Rechnungsgruppe -800.00 USD (Sie schulden noch 800 $). Nach der Abschlusszahlung ist sie null. Wenn Sie das Journal nach ^INV-9001 filtern, wird weiterhin der vollständige Verlauf angezeigt.
Hilfreiche Abfragen (BQL)
Sie können diese Abfragen in Favas „Query“-Tab oder von der Befehlszeile mit bean-query ausführen (BQL-Referenz). Unten verifiziert mit Beancount 3.2.3 und beanquery 0.2.0.
Tipp: Die Funktion
any_meta()sucht zuerst nach einem Metadatenschlüssel auf der Buchung und fällt dann auf die Transaktion zurück – so erscheinen Transaktionswerte wieinvoice:/due:im Ergebnis.
Offene AP nach Lieferant (Saldenansicht):
Diese Abfrage summiert den Verbindlichkeitsbestand pro Lieferant. Ein Haben (negativer Gesamtbetrag) ist das, was Sie diesem Lieferanten noch schulden.
SELECT payee, COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;Offene Rechnungen zu einem festen Datum (Offene-Posten-Bericht):
Ein Offene-Posten-Bericht beantwortet die Frage „Was ist noch unbezahlt?“. Er muss (1) zu einem expliziten Stichtag abschneiden, damit spätere Zahlungen eine frühere Momentaufnahme nicht stillschweigend löschen können, (2) nach der gemeinsamen Rechnungsidentität (payee + invoice: + due:) gruppieren, (3) beglichene (Null-)Gruppen ausschließen und (4) einen positiven offenen Betrag anzeigen – nicht einen rohen, vorzeichenbehafteten AP-Haben.
Berichtsdatum, das überall unten verwendet wird: 2025-09-04.
Herunterladbares AP-Start-Hauptbuch
Laden Sie accounts-payable-starter.bean herunter – ein eigenständiges Hauptbuch, das aus dem vollständigen Block unten generiert wurde (Kontoeröffnungen, fiktives Eröffnungscash, beglichene / teilweise / unbezahlte Rechnungen, Stichtag 2025-09-04). Alle Namen und Beträge sind fiktive Beispieldaten. Keine Rechnungs-PDF, Dokumentenordner oder andere Datei ist erforderlich, um es zu validieren oder abzufragen.
Erster Lauf in einem sauberen temporären Verzeichnis (festgelegte Versionen Beancount 3.2.3 / beanquery 0.2.0):
# Save the download as accounts-payable-starter.bean in this directory, then:
uvx --from beancount==3.2.3 bean-check accounts-payable-starter.bean
uvx --from beanquery==0.2.0 --with beancount==3.2.3 bean-query accounts-payable-starter.bean \
"SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"bean-check endet mit Exit-Code 0 und keiner Ausgabe. Die Abfrage gibt die fünf offenen Zeilen in der unten erwarteten Tabelle zurück (Forest fehlt; Acme offen 800.00; Summe der positiven offenen Beträge = 1500.00). Regenerieren Sie den committeten Download mit yarn generate:ap-starter nach Änderungen am Block; yarn generate:ap-starter --check schlägt fehl, wenn das Artefakt veraltet ist.
Fügen Sie diese vollständige Fixture ein (Eröffnungen + Eröffnungscash + die drei Rechnungsformen, plus heute-fällige / überfällige / Grenzfall-Zeilen für die Altersstruktur). Frühzahlungsrabatt-Alternativen für INV-10455 bleiben vollständig auskommentiert – aktivieren Sie genau eine nur, wenn Sie die Standard-Forest-Zahlung ersetzen; lassen Sie niemals beide Rabattoptionen zusammen mit dieser Zahlung aktiv.
; accounts-payable-starter — complete runnable AP workflow
option "operating_currency" "USD"
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Equity:Opening-Balances USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
2025-01-01 open Expenses:Parts USD
2025-01-01 open Expenses:Office USD
2025-01-01 open Income:Discounts:Payables USD
; Fictional opening cash — enough to cover every payment in this ledger
2025-01-01 * "Opening balance"
Assets:Bank:Checking 5000.00 USD
Equity:Opening-Balances -5000.00 USD
; Settled before as-of — must disappear from the open report
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD
; Early-payment discount alternatives for INV-10455 — mutually exclusive with
; the standard payment above AND with each other. To take 2/10 instead: delete
; (or comment out) the 2025-09-01 payment, then uncomment EXACTLY ONE option.
; Never leave both options active — that clears AP twice.
;
; Option 1: Record the discount as other income
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Income:Discounts:Payables -10.00 USD
;
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Expenses:Supplies:Paint -10.00 USD
; Partial before as-of; final $800 payment is AFTER 2025-09-04
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USD
; Unpaid — not yet due as of 2025-09-04
2025-08-15 * "Bright Office Co" "INV-220" ^INV-220
invoice: "INV-220"
due: "2025-09-14"
Expenses:Office 300.00 USD
Liabilities:AccountsPayable -300.00 USD
; Unpaid — due today (as-of == due)
2025-08-20 * "Helix Industries" "INV-440" ^INV-440
invoice: "INV-440"
due: "2025-09-04"
Expenses:Parts 200.00 USD
Liabilities:AccountsPayable -200.00 USD
; Unpaid — 30 days overdue as of 2025-09-04
2025-07-06 * "Metro Hardware" "INV-77" ^INV-77
invoice: "INV-77"
due: "2025-08-05"
Expenses:Parts 150.00 USD
Liabilities:AccountsPayable -150.00 USD
; Overpayment — credit balance (not an amount due; see edge cases)
2025-08-01 * "Credit Vendor" "INV-C1" ^INV-C1
invoice: "INV-C1"
due: "2025-08-20"
Expenses:Parts 100.00 USD
Liabilities:AccountsPayable -100.00 USD
2025-08-18 * "Credit Vendor" "Overpay INV-C1" ^INV-C1
invoice: "INV-C1"
due: "2025-08-20"
Liabilities:AccountsPayable 150.00 USD
Assets:Bank:Checking -150.00 USD
; Missing due metadata — still open; age into a separate bucket, do not drop
2025-08-12 * "No Due Co" "INV-ND" ^INV-ND
invoice: "INV-ND"
Expenses:Office 50.00 USD
Liabilities:AccountsPayable -50.00 USDOffene-Posten-Abfrage (beanquery 0.2.0 unterstützt HAVING SUM(number) < 0; es unterstützt nicht den Vergleich eines inventory mit 0 mittels COST(SUM(position)) != 0):
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
-SUM(number) AS outstanding
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) < 0
ORDER BY due, payee;Erwartete Zeilen am 2025-09-04 (unabhängig von den Transaktionen abgeleitet: Rechnung − Zahlungen mit Datum ≤ Stichtag; Forest ergibt netto 0 und fehlt):
| payee | invoice | due | outstanding |
|---|---|---|---|
| No Due Co | INV-ND | (leer) | 50.00 |
| Metro Hardware | INV-77 | 2025-08-05 | 150.00 |
| Helix Industries | INV-440 | 2025-09-04 | 200.00 |
| Acme Parts | INV-9001 | 2025-09-09 | 800.00 |
| Bright Office Co | INV-220 | 2025-09-14 | 300.00 |
Summe der positiven offenen Beträge = 1.500,00. Die 500-$-Rechnung von Forest ist weg. Acme zeigt weiterhin 800 $ (1.200 $ − 400 $); die Zahlung von 800 $ am 2025-09-05 liegt nach dem Stichtag und kann diese Momentaufnahme daher nicht schließen.
Stimmen Sie mit der AP-Verbindlichkeit zum selben Stichtag ab:
SELECT COST(SUM(position)) AS ap_balance
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04;Erwartet: ap_balance = (-1450.00 USD). Unabhängig: offene Beträge von 1.500 $ minus die 50 $ Lieferantenguthaben (unten) = 1.450 $ geschuldet → Verbindlichkeitsbestand -1450.00 USD.
Verschieben Sie den Stichtag um einen Tag nach hinten (date <= 2025-09-05) und führen Sie die Offene-Posten-Abfrage erneut aus: Die Zeile von Acme verschwindet (letzte Zahlung enthalten) und ap_balance wird (-650.00 USD). Eine Zahlung nach dem Berichtsdatum überschreibt den früheren Bericht nie.
Lieferantenguthaben / Überzahlungen: HAVING SUM(number) < 0 behält nur Beträge, die Sie noch schulden. Eine Überzahlung dreht die AP-Summe der Gruppe ins Positive. Listen Sie diese separat auf – behandeln Sie einen positiven AP-Saldo nicht als „fälligen Betrag“:
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
SUM(number) AS credit
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) > 0
ORDER BY payee;Erwartet: eine Zeile – Credit Vendor / INV-C1 / 2025-08-20 / credit = 50.00 (Sie haben um 50 $ überzahlt).
Fehlendes due:: INV-ND erscheint weiterhin im offenen Bericht mit leerem Fälligkeitsdatum. Ordnen Sie es einem eigenen missing-due-Eimer zu (unten); lassen Sie es niemals stillschweigend weg.
Rechnungen mit angehängten PDFs auflisten:
SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account ~ "^Liabilities:AccountsPayable"
ORDER BY date DESC;Wo Sie AP in Fava sehen
- Bilanz: Navigieren Sie zu
Balance Sheet→Liabilities→AccountsPayable, um den Gesamtsaldo zu sehen und in die Transaktionsdetails zu gehen. - Journal: Filtern Sie das Journal nach
account:Liabilities:AccountsPayableoder einem bestimmten Link wie^INV-xxxx, um den vollständigen Lebenszyklus einer Rechnung zu sehen. - Dokumente: Mit gesetztem
option "documents"findet Beancount Dateien unter diesem Baum. Favas Dokumentenansichten und daslink_documents-Plugin (siehe oben) verbinden diese Dateien mit Transaktionen, diedocument:-Metadaten tragen.
AP-Altersstruktur, Umschlagshäufigkeit und Cashflow-Bewusstsein
Altersstrukturplan (reproduzierbarer Export + Eimer): beanquery 0.2.0 kann die obigen Offene-Posten-Zeilen ausgeben, bietet jedoch keinen integrierten Altersstruktur-Ausdruck über due-Metadaten. Exportieren Sie den offenen Bericht und ordnen Sie dann deterministisch gegen dasselbe Stichtagsdatum in Eimer ein.
bean-query -f csv -o open-ap.csv accounts-payable-starter.bean \
"SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"CSV-Spalten: payee, invoice, due, outstanding.
Eimerregel für Stichtag D = 2025-09-04 und das jeweilige due der Zeile (ISO YYYY-MM-DD):
| Bedingung | Eimer |
|---|---|
due leer | missing-due |
due > D | not-yet-due |
due == D | due-today |
1 ≤ (D − due) ≤ 30 | 1-30-overdue |
31 ≤ (D − due) ≤ 60 | 31-60-overdue |
(D − due) ≥ 61 | 61+-overdue |
Kompaktes Python (nur Standardbibliothek), das diese Tabelle implementiert:
from datetime import date
AS_OF = date(2025, 9, 4)
# Apply bucket() to each CSV row's due column (ISO YYYY-MM-DD or empty).
def bucket(due: str | None) -> str:
if not due:
return "missing-due"
days = (AS_OF - date.fromisoformat(due)).days
if days < 0:
return "not-yet-due"
if days == 0:
return "due-today"
if days <= 30:
return "1-30-overdue"
if days <= 60:
return "31-60-overdue"
return "61+-overdue"Erwartete Altersstruktur für die offenen Zeilen am 2025-09-04:
| invoice | due | Tage überfällig | Eimer | outstanding |
|---|---|---|---|---|
| INV-ND | (leer) | — | missing-due | 50.00 |
| INV-77 | 2025-08-05 | 30 | 1-30-overdue | 150.00 |
| INV-440 | 2025-09-04 | 0 | due-today | 200.00 |
| INV-9001 | 2025-09-09 | −5 | not-yet-due | 800.00 |
| INV-220 | 2025-09-14 | −10 | not-yet-due | 300.00 |
Heute-fällig wird nicht in „aktuell“ eingefaltet: due == as-of ist ein eigener Eimer. Noch-nicht-fällig erfordert due > as-of.
- AP-Umschlagshäufigkeit:
Gesamte Lieferanteneinkäufe ÷ durchschnittliche AP. Eine verwandte Kennzahl, Days Payable Outstanding (DPO), ist ungefähr365 ÷ Umschlagshäufigkeit. - Wenn Sie nicht pünktlich zahlen können: AP ist für kurzfristige Schulden gedacht. Wenn ein Lieferant einer formellen, längerfristigen Rückzahlung zustimmt, klassifizieren Sie aus AP in ein Schuldscheindarlehen um – behalten Sie dieselbe Rechnungsidentität bei der Umwandlung bei, damit die AP-Gruppe beglichen wird.
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
invoice: "INV-1110"
due: "2025-09-15"
Liabilities:AccountsPayable 2000.00 USD
Liabilities:NotesPayable -2000.00 USDBest Practices für AP in einem Klartext-Hauptbuch
- Papierlos gehen: Speichern Sie Rechnungs-PDFs unter Ihrem Dokumentenbaum und hängen Sie sie mit dem
document:-Metadatenschlüssel an (und Fava-Upload /link_documents, wenn Sie Fava verwenden). - Rechnungsidentität bei Zahlungen wiederverwenden: Setzen Sie dasselbe
invoice:,due:und^linkauf die Rechnung und auf jede Zahlung, die sie begleicht. - Gegen ein Stichtagsdatum berichten: Schneiden Sie Offene-Posten- und Altersstrukturabfragen mit
date <= YYYY-MM-DDab, damit eine spätere Zahlung eine frühere Momentaufnahme nicht überschreiben kann; altern Sie mit demselbenD. - Metadaten ordentlich halten: Die konsistente Verwendung von
invoice:,due:undterms:verbessert Suche, Abfragen und Finanzprüfungen. - Durchgehend periodengerecht: Wenn Sie nützliche AP-Berichte wünschen, verpflichten Sie sich, Ihre Bücher auf periodengerechter Basis zu führen. Beancount und Fava behandeln periodengerechte Salden in der Bilanz ohne spezielle Plugins.
Kopieren-Einfügen-Start: Lieferantenrechnung + Zahlung
Für den vollständigen Offene-Posten-Arbeitsablauf (beglichen + teilweise + unbezahlt, Stichtag, Altersstruktur) bevorzugen Sie den oben herunterladbaren AP-Start. Das minimale Paar aus Rechnung + Zahlung unten zeigt weiterhin die Identität auf beiden Seiten – eröffnen Sie zuerst die Konten (oder fügen Sie diese Eröffnungen in Ihr Hauptbuch ein). Optionale document:-Metadaten werden hier weggelassen, sodass nichts außerhalb des Hauptbuchs erforderlich ist.
option "operating_currency" "USD"
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
; ---- Bill ----
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD
; ---- Payment (no discount) ----
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USDMit Beancount 3.2.3 und beanquery 0.2.0 erzeugt das Laden dieses Starters keine Fehler, das AP-Konto ergibt netto null und die Rechnungs- und Fälligkeitsabfrage gibt eine einzelne Gruppe (Forest Paint Supply, INV-10455, 2025-09-04) mit leerem Betrag (beglichen) zurück – nicht eine Rechnungszeile plus eine verwaiste (…, null, null)-Zahlungszeile.
Dieser Leitfaden dient nur zu Bildungszwecken und stellt keine Steuer-, Rechts- oder Finanzberatung dar.
Referenzen & weiterführende Literatur:
- Beancount-Sprachsyntax – Konten, Metadaten, Tags, Links und Dokumente (verifiziert am 2026-09-11)
- Beancount-Abfragesprache (BQL) Referenz (verifiziert am 2026-09-11)
- Fava-Funktionen – Dokumenten-Upload und
link_documents(verifiziert am 2026-09-11) any_meta()zum Abfragen von Transaktions-/Buchungsmetadaten (Martin Blais, Beancount-Mailingliste; verifiziert am 2026-09-11)





