Markenerkennung: Grenzen gemessen, Summenzeile im Kopf ist keine Marke

Auf die Frage, ob Belege einheitlich gestaltet sind: nein. Die Erkennung
haengt an drei Annahmen - Marke in den ersten acht Zeilen, Marke in der
festen Liste, Marke ueberhaupt vorhanden. Alle drei sind jetzt gemessen und
in Tests festgehalten.

Dabei ein echter Defekt gefunden: "Total" ist Kopfmarke UND Summenwort. Ein
Beleg mit Betrag in den ersten acht Zeilen lieferte faelschlich die Marke
"Total" (an einem echten Beleg reproduziert). _betragszeile() filtert
Summenzeilen jetzt aus dem Kopf - verlangt werden beide Kennzeichen zugleich,
Summenwort und Geldangabe, damit "SHELL TANKSTELLE, 6450 SOELDEN" nicht
mitfaellt. Gegenprobe: ein echter "TOTAL TANKSTELLE"-Kopf ergibt weiter Total.

Der Ausfall beschaedigt nichts: mit unbekannter Marke im Kopf bleiben Liter,
Betrag, Rabatt und Anschrift unveraendert richtig, nur die Marke fehlt.

Parser-Suite 17 Tests (von 11), alle zwoelf abgelegten Belege liefern weiter
Shell, audi_ha_test auf 2026.9.4.22 ohne Traceback.
This commit is contained in:
2026-09-04 17:09:12 +02:00
parent bdbdb4a010
commit 8557bfe230
7 changed files with 204 additions and 5 deletions
+59
View File
@@ -10855,3 +10855,62 @@ dieselben Eingaben laufen lassen, nicht nachgebaut.
OTA-Buendel (2026.9.4.21) und brauchen keinen Xcode-Lauf. Der offene Punkt aus
Abschnitt CM bleibt: dass die `packageClassList`-Registrierung auf dem Geraet
greift, zeigt erst der naechste Xcode-Lauf.
## CO. "Gibt es eine Garantie, dass alle Tankstellen ihre Belege gleich gestalten?" - Nein. Was gemessen wurde (2026.9.4.22)
Die Frage des Eigentuemers zur Markenerkennung. Die ehrliche Antwort ist nein,
und sie ist gemessen statt behauptet.
### Wovon die Erkennung abhaengt
Drei Annahmen, jede eine mit Bruchstelle:
1. **Die Marke steht in den ersten acht Zeilen.** Gemessen ueber alle zwoelf
abgelegten Belege: elfmal Zeile 0, beim oesterreichischen Format Zeile 1.
Das Fenster ist der Puffer, nicht die Erwartung - ab Zeile 8 findet sie
niemand mehr (nachgestellt, liefert `None`).
2. **Die Marke steht in `_MARKEN`.** Eine feste Liste von 26 Namen, von Hand
gepflegt. Was nicht drinsteht, wird nicht erkannt.
3. **Sie steht ueberhaupt drauf.** Freie Tankstellen fuehren keine.
### Der Ausfall beschaedigt nichts - nachgestellt
Kopfzeile eines echten Belegs durch `OIL! Tankstelle`, `Hoyer Tankstelle`,
`Freie Tankstelle Mueller` ersetzt:
* `station_brand` wird `None`,
* `station_name` faellt auf den Betreibernamen zurueck,
* Liter, Betrag, Rabatt, Anschrift bleiben **unveraendert richtig**.
In der Anzeige heisst das `Pascalstr., Ingolstadt` statt
`Shell, Pascalstr., Ingolstadt` - die Marke fehlt, sonst nichts. Genau so soll
es sein: **ein falscher Name waere schlimmer als keiner.**
### Ein echter Defekt, dabei gefunden
`"Total"` ist **beides**: eine Kopfmarke und ein Summenwort. Ein Beleg, der den
Betrag schon in den ersten acht Zeilen druckt, lieferte faelschlich die Marke
`Total` - an einem echten Beleg mit vorangestellter Summenzeile reproduziert.
Der Kommentar an `_GELD` warnt seit jeher vor genau diesem Wort; das Fenster
allein war die einzige Absicherung.
Jetzt filtert `_betragszeile()` Summenzeilen aus dem Kopf, bevor gesucht wird.
Verlangt werden **beide** Kennzeichen zugleich - Summenwort UND echte
Geldangabe -, damit eine Kopfzeile wie `SHELL TANKSTELLE, 6450 SÖLDEN` nicht
mitfaellt. Gegenprobe geprueft: ein echter `TOTAL TANKSTELLE`-Kopf ergibt
weiterhin `Total`.
### Was daraus NICHT folgt
Die Erkennung ist **an genau einer Marke belegt**: alle zwoelf abgelegten
Belege sind Shell. Ueber die anderen 25 Eintraege der Liste sagt das nichts -
sie sind plausibel, aber ungeprueft. Ein Beleg einer anderen Kette waere der
erste echte Test.
### Verifiziert
Parser-Suite jetzt **17 Tests** (von 11): die neue Klasse
`MarkenerkennungGrenzen` haelt fest, wo die Erkennung greift, wo sie aufgibt,
und dass ein Aufgeben den Beleg nicht beschaedigt. Alle zwoelf Belege liefern
weiterhin `Shell`. `audi_ha_test` auf 2026.9.4.22, 0 Tracebacks, das Nachtragen
lief erwartungsgemaess **nicht** erneut.