Station name as "brand, street, city", grey box on all editable fields

The "grey box around the icons" report turned out not to be a defect: the box
on "10.000 km"/"1 Jahr"/"15" is the wanted pattern, and every value the user
can change should carry it. All .feld inputs and selects now get the grey iOS
fill; inputs with their own visual language (checkbox/radio/range/file) keep
the transparent base rule, so the switches are unaffected.

Fuel stations are now displayed as "Shell, Pascalstr. 8, Ingolstadt" instead of
the bare operator name. New _marke()/_ist_strasse()/_tankstelle() helpers are
shared by both parser paths so Shell and non-Shell receipts format the same.
The brand is only matched against the receipt header - searching the whole text
would let "Total" hit a totals line. Missing parts are dropped instead of
leaving empty comma slots, and without a known brand the operator name takes
its place. station_address still carries the full street and postcode.
test_bekannte_stationen updated to the new format; suite stays green.

installationspaket/ is versioned from now on (user request). It contains no
real vehicle data - only the example profile with empty FIN/plate placeholders.
Keep it in sync whenever pyscript/ or www/ changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 12:52:31 +02:00
parent 39da68cd87
commit fb38c297bd
49 changed files with 11131 additions and 27 deletions
@@ -76,12 +76,17 @@ class AlleBelegeParsenOhneFehler(unittest.TestCase):
self.assertEqual(len(schluessel), len(set(schluessel)), schluessel)
def test_bekannte_stationen(self):
# Vier verschiedene Betreiber/Städte in den zehn Belegen - stellt sicher,
# dass die Stationserkennung nicht zufällig nur für einen Betreiber passt.
# Vier verschiedene Standorte in den zehn Belegen - stellt sicher, dass
# die Stationserkennung nicht zufällig nur für einen Beleg passt.
# Anzeigeformat seit 2026-08-16: "Marke, Straße, Ort" statt des reinen
# Betreibernamens ("A. Zrenner GmbH" o. ä.) - der Betreiber sagt beim
# Durchblättern der Tankvorgänge weniger als Marke und Ort.
namen = {d["station_name"] for d in self.ergebnisse.values()}
erwartet = {
"A. Zrenner GmbH", "Thomas Bauch GmbH",
"TC Sengül GmbH", "Hermann Mogler Mineralölg. GmbH",
"Shell, Pascalstr. 8, Ingolstadt",
"Shell, Münchener Str.15a, Ingolstadt",
"Shell, Nürnberger Str.74, Ansbach",
"Shell, Heidenheimerstr.6, Königsbronn",
}
self.assertEqual(namen, erwartet)