Storno und Berichtigung kommen an, gemeinsames Nummernbuch, kein Bearbeiten mehr
Storno: das Journal zaehlte die Uebernachtungen der aufgehobenen Rechnung weiter mit (4 - 0 + 3 = 7 statt 3 gemeldeter Naechte). Die Betraege kuerzten sich, die Naechte nicht. Der Storno traegt jetzt die negative Zahl, und das Journal kennt Art, Bezug und Datum des Belegs (vier neue Spalten, alte Journale bauen sich beim Oeffnen um). Berichtigung: das Blatt wurde nur uebersprungen. Der berichtigte NAME kommt jetzt in der Buchung an - im Amtsbericht stand sonst weiter der falsche. Angewandt wird erst am Ende des Scans, das Blatt kann vor seiner Rechnung im Ordner liegen. Doppelte Nummern: eine stornierte Rechnung ist keine offene mehr und faellt aus der Meldung. Zugeordnet wird ueber Nummer + Datum + Empfaenger, nicht ueber die Nummer allein - bei einer doppelt vergebenen Nummer waere die kein eindeutiger Bezug, und genau den verlangt § 31 Abs. 5 UStDV. Die Texte nennen jetzt den Weg: eine der beiden im Rechnungstool stornieren und mit freier Nummer neu ausstellen (§ 14 Abs. 4 Nr. 4 UStG - jede Nummer nur einmal). Neue Spalte "Art": Storno zu ..., storniert, Neuausstellung. Aufgehobene Zeilen stehen grau - geloescht wird nichts. Gemeinsames Nummernbuch (gemeinsam.py, ordnerwahl.py - in beiden Programmen dieselbe Datei): eine SQLite in einem Ordner, den beide kennen. Das Journal traegt seine Nummern ein, auch die aus der Excel-Mappe ohne PDF - genau die kannte das Rechnungstool nicht und vergab sie ein zweites Mal. Beim ersten Start wird nach dem Ordner gefragt (auswaehlen, OK, Sicherheitsfrage, bei Nein zurueck ins Feld); wer ihn nicht hat, kommt mit "Spaeter einrichten" weiter. Kein Doppelklick zum Bearbeiten mehr (gui_dialoge.py geloescht): wer hier Betrag oder Nummer verstellt, meldet dem Amt etwas anderes, als auf dem Beleg steht. Loeschen bleibt. --test / CAMPINGHOF_TEST=1 unterdrueckt den Erststart-Dialog (Pruefstaende). Pruefstaende: pruef_storno_journal.py (neu, ueber BEIDE Programme: Storno, Berichtigung, doppelte Nummer aufloesen), pruef_doppelte, pruef_berichtigung, pruef_einzelinstanz - alle gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYeAfLtccFrbU3MTj1MMTx
This commit is contained in:
parent
9e564466c7
commit
59d2db75af
12 changed files with 906 additions and 212 deletions
|
|
@ -177,6 +177,19 @@ def _aus_metadaten(pfad: str):
|
|||
return daten
|
||||
|
||||
|
||||
def berichtigung_daten(pfad: str):
|
||||
"""Kenndaten eines Berichtigungsblatts (§ 31 Abs. 5 UStDV), sonst None.
|
||||
|
||||
Das Blatt bucht nichts - es reicht die Angaben zum Empfaenger nach. Genau
|
||||
die will das Journal aber uebernehmen: steht auf der Rechnung noch der
|
||||
falsche Name, muss der Amtsbericht den berichtigten zeigen.
|
||||
"""
|
||||
kopf = _aus_metadaten(pfad)
|
||||
if not kopf or kopf.get("art") != "berichtigung":
|
||||
return None
|
||||
return kopf
|
||||
|
||||
|
||||
def keine_buchung(pfad: str) -> bool:
|
||||
"""True fuer Blaetter, die keine Uebernachtung abrechnen.
|
||||
|
||||
|
|
@ -185,8 +198,7 @@ def keine_buchung(pfad: str) -> bool:
|
|||
die es berichtigt, und lauter Nullen. Wer es einliest, ueberschreibt damit
|
||||
die echte Buchung - im Amtsbericht fehlt die Uebernachtung dann.
|
||||
"""
|
||||
kopf = _aus_metadaten(pfad)
|
||||
return bool(kopf and kopf.get("art") == "berichtigung")
|
||||
return berichtigung_daten(pfad) is not None
|
||||
|
||||
|
||||
def parse_pdf(pfad: str, standard_satz: float = STANDARD_SATZ) -> Buchung:
|
||||
|
|
@ -205,6 +217,10 @@ def parse_pdf(pfad: str, standard_satz: float = STANDARD_SATZ) -> Buchung:
|
|||
satz=float(meta.get("steuer_satz") or 0) or standard_satz,
|
||||
quelle="pdf",
|
||||
pdf_pfad=os.path.abspath(pfad),
|
||||
art=str(meta.get("art") or "rechnung"),
|
||||
storno_zu=str(meta.get("storno_zu") or ""),
|
||||
storno_datum=str(meta.get("storno_datum") or ""),
|
||||
vorgang=str(meta.get("vorgang") or ""),
|
||||
)
|
||||
log.debug("aus Metadaten: %s | %s | %s | %s Nächte | %.2f €",
|
||||
os.path.basename(pfad), b.voll_nummer, b.nachname, b.naechte, b.gezahlt)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue