Hauptuntersuchung: Ableitung aus Erstzulassung und Wartungsplan, drittes Feld entfernt
Gemeldet: Wartungsplan leer, Erstzulassung 01.03.2025, erwartet 01.03.2028 -
gezeigt wurden drei verschiedene Antworten (Uebersicht 01.08.2026, Mein Audi
"August 2026", Service "kein Eintrag im Wartungsplan").
Ursache war das Profilfeld hauptuntersuchung_faellig ("08/2026"), das die
Ableitung ueberstimmte, in keiner Oberflaeche ein Eingabefeld hatte und im
Backend kein Schema. Drei Bildschirme verarbeiteten denselben Wert
verschieden. Das Feld ist samt Lese- und Schreibweg entfernt; es gibt jetzt
zwei Quellen: Wartungsplan + 24 Monate, sonst Erstzulassung + 36 Monate.
Dabei mitbehoben:
* Die Service-Kachel verschluckte abgeleitete Termine, sobald kein
Wartungsplan-Eintrag dahinterstand.
* monatePlus() in der App verlor einen Tag ueber die Zeitumstellung (drei von
fuenf gemessenen Faellen) - betraf Oelwechsel- und Inspektionsprognose
genauso. Das Panel rechnete dort seit jeher richtig.
* Die App verlangte fuer jeden Wartungsplan-Eintrag eine Kilometerangabe. Eine
Hauptuntersuchung ist rein datumsbasiert; ohne km waere der erste HU-Eintrag
ignoriert worden. Ausserdem nahm das Panel den ersten Treffer der Liste, die
App den juengsten - beide nehmen jetzt den juengsten.
* Monatsgenauigkeit ("03/2025") bleibt auf beiden Seiten erhalten.
Neu: paritaet_hu.test.ts vergleicht die App gegen die aus der Panel-Quelle
herausgeschnittenen Originalfunktionen, 15 Faelle. Gesamt 292 App-Tests, 73
Python-Tests mit 231 Untertests, 0 Tracebacks. Live an der Testinstanz auf
allen drei gemeldeten Bildschirmen geprueft.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -22,11 +22,16 @@ der Reihenfolge vorheriger Aufrufe.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from . import einstellungen
|
||||
from .ablage import Ablage
|
||||
from .einstellungen import FELDER, SCHLUESSEL, STANDARDWERTE, Sensorzuordnung
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _ist_leer(wert: object) -> bool:
|
||||
"""Leer heißt: keine Zuordnung. Auch eine Liste, die nur leere Einträge
|
||||
enthält - das Setup-Menü schickt für unbelegte Positionen ["","",...], und
|
||||
@@ -47,8 +52,24 @@ class Zuordnung:
|
||||
|
||||
async def anwenden(self) -> None:
|
||||
"""Setzt für jedes bekannte Feld den wirksamen Wert - den Override,
|
||||
wenn einer hinterlegt ist, sonst den eingebauten Standardwert."""
|
||||
wenn einer hinterlegt ist, sonst den eingebauten Standardwert.
|
||||
|
||||
Räumt dabei einmalig auf: Schlüssel, die der Katalog nicht mehr kennt,
|
||||
werden aus entitaeten.json entfernt. `speichern()` filtert sie schon
|
||||
beim Schreiben heraus, aber eine bestehende Datei behielt sie bis zum
|
||||
nächsten Speichern - und ein Feld, das es nicht mehr gibt, soll auch
|
||||
nicht mehr in den Daten stehen. Angefallen ist das mit dem Entfernen
|
||||
von TRIP_SENSOR am 05.09.2026."""
|
||||
overrides = await self._ablage.zuordnung_lesen()
|
||||
verwaist = [k for k in overrides if k not in SCHLUESSEL]
|
||||
if verwaist:
|
||||
_LOGGER.info(
|
||||
"Zuordnung: %s kennt der Katalog nicht mehr - entfernt",
|
||||
", ".join(sorted(verwaist)),
|
||||
)
|
||||
await self._ablage.zuordnung_schreiben(
|
||||
{k: v for k, v in overrides.items() if k in SCHLUESSEL}
|
||||
)
|
||||
for key in SCHLUESSEL:
|
||||
wert = overrides.get(key)
|
||||
standard = STANDARDWERTE[key]
|
||||
|
||||
Reference in New Issue
Block a user