import { readFileSync, writeFileSync } from "node:fs" const p = "custom_components/audi_dashboard/shell_beleg_parser.py" let s = readFileSync(p, "utf8") const alt = [ "def _marke(zeilen):", ' """Markenname aus dem Belegkopf ("SHELL STATION" -> "Shell"). None, wenn', ' keine bekannte Marke draufsteht - dann bleibt es beim Betreibernamen."""', ' kopf = "\n".join(zeilen[:8])', " for marke in _MARKEN:", ' if re.search(r"\b" + re.escape(marke) + r"\b", kopf, re.IGNORECASE):', " return marke", " return None", ].join("\n") const neu = [ "def _betragszeile(zeile):", ' """Eine Summenzeile ("GESAMT 78,78 EUR")? Sie darf im Kopf nicht nach', " Marken durchsucht werden.", "", ' Grund: "Total" ist beides - eine Kopfmarke und ein Summenwort. Auf einem', " Beleg mit knappem Kopf, der den Betrag schon in den ersten acht Zeilen", ' druckt, wuerde daraus faelschlich die Marke "Total" (am 04.09.2026 an', " einem echten Beleg mit vorangestellter Summenzeile nachgestellt und", " reproduziert). Verlangt werden beide Kennzeichen zugleich - Summenwort", " UND echte Geldangabe -, damit eine Anschrift mit Hausnummer oder eine", ' Postleitzahl ("SHELL TANKSTELLE, 6450 SÖLDEN") nicht mitfaellt."""', ' kompakt = re.sub(r"\s+", "", zeile).upper()', " if not any(wort in kompakt for wort in _GESAMT_WOERTER):", " return False", " return bool(re.search(_GELD, zeile))", "", "", "def _marke(zeilen):", ' """Markenname aus dem Belegkopf ("SHELL STATION" -> "Shell"). None, wenn', " keine bekannte Marke draufsteht - dann bleibt es beim Betreibernamen.", "", " Acht Zeilen, weil die Marke in den bekannten Belegen in Zeile 0 steht und", " im oesterreichischen Format in Zeile 1 (am 04.09.2026 ueber alle zwoelf", ' abgelegten Belege gemessen) - das Fenster ist der Puffer, nicht die",', ' Erwartung."""', " kopf = [z for z in zeilen[:8] if not _betragszeile(z)]", ' text = "\n".join(kopf)', " for marke in _MARKEN:", ' if re.search(r"\b" + re.escape(marke) + r"\b", text, re.IGNORECASE):', " return marke", " return None", ].join("\n") if (s.split(alt).length - 1 !== 1) throw new Error("Anker nicht eindeutig") writeFileSync(p, s.replace(alt, neu)) console.log("ok")