Files
audi-app/companion-app/src/tests/beispieldaten.ts
T
tobias b1cd03be51 Wartungsplan-Schema companion-app<->Panel angeglichen; Setup-Feldkopf zeigt zugeordneten Sensor
companion-app nannte Servicebuch-Feldnamen betrieb/notiz, waehrend Panel und
Backend (profil["service"]["buch"]) werkstatt/kosten/arbeiten verwenden -
ohne Uebersetzung dazwischen zeigten in einer Oberflaeche angelegte
Eintraege in der anderen leere Werkstatt-/Kosten-Werte. werkstatt/kosten/
arbeiten als kanonisch uebernommen (aeltere, bereits etablierte Panel-
Konvention); ServicebuchEintrag, das Bearbeitungsformular (inkl. neuem
Kosten-Feld) und die Ansicht in Service.tsx angepasst, den Workaround-Cast
im CSV-Export (DatensatzPopup.tsx) sowie die Testfixture entsprechend
bereinigt.

Setup-Popup (Panel, Item 11 aus der letzten Sammel-Rueckmeldung): die
statische Beschreibung unter jedem Feldnamen ist jetzt die Kennung und der
aktuelle Wert des tatsaechlich zugeordneten Sensors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-28 10:38:27 +02:00

215 lines
6.3 KiB
TypeScript

/**
* Beispieldaten für Rendertests. Aufgebaut wie das, was das Backend
* tatsächlich liefert (an der laufenden Testinstanz abgelesen), nicht wie es
* laut Spezifikation aussehen sollte.
*/
import type { DataMetricApi, Fahrt, Fahrzeugstatus, Profil, Tankvorgang } from "../api"
export const beispielStatus: Fahrzeugstatus = {
km: 48250,
tankprozent: 62,
reichweite_km: 385,
batteriespannung: null,
gesichert: true,
sicherheitscheck: [
{ label: "Tür vorne links", ok: true, gruppe: "tueren_klappen" },
{ label: "Tür vorne rechts", ok: true, gruppe: "tueren_klappen" },
{ label: "Motorhaube", ok: null, gruppe: "tueren_klappen" },
{ label: "Fenster vorne links", ok: false, gruppe: "fenster_dach" },
{ label: "Türschloss vorne links", ok: true, gruppe: "verriegelt" },
{ label: "Standlicht", ok: true, gruppe: "licht" },
],
oelwechsel_faellig_ts: "2027-03-14T00:00:00+00:00",
oelwechsel_faellig_km: 11750,
inspektion_faellig_ts: "2027-03-14T00:00:00+00:00",
inspektion_faellig_km: 11750,
}
export const beispielProfil: Profil = {
fahrzeug: {
fin: "WUAZZZF48PA902804",
titel: "RS 4 Avant",
zusatz: "competition",
untertitel: "quattro · 331 kW",
details: "2.9 TFSI quattro competition",
kennzeichen: "M AB 1234",
erstzulassung: "2023-04-01",
hauptuntersuchung_faellig: "2027-04-01",
tankvolumen_liter: 58,
ausfuehrung: "competition",
},
einstellungen: {
nacht_von: "22:00",
nacht_bis: "06:00",
fahrten_pausenzeit_min: 15,
uebersichtsbild: "seitenansicht.webp",
kraftstoffanbieter: "Shell",
smartdeal: { aktiv: true, laeuft_ab: null },
oelwechsel_intervall: {
modus: "hersteller",
km: 15000,
monate: 12,
hersteller_km: 30000,
hersteller_monate: 24,
},
backup_intervall: "taeglich",
letztes_backup: "2026-08-10T04:00:00",
},
versicherung: {
gesellschaft: "Beispiel Versicherung",
vertrag: "Vollkasko",
nummer: "V-123456",
service: "0800 111111",
notfall: "0800 222222",
beitrag: 840,
zahlweise: "jährlich",
gueltigAb: "2026-01-01",
teile: [
{ bez: "Haftpflicht", betrag: 320 },
{ bez: "Vollkasko", betrag: 520 },
],
selbst: [["Vollkasko", "500 €"]],
leistungen: [{ bez: "Werkstattbindung", wert: "nein" }],
schutzbrief: {
stand: "2026-01",
gilt: "Europa",
versichert: "Fahrzeug und Insassen",
ausloeser: ["Panne", "Unfall"],
entweder: [],
gruppen: ["Abschleppen"],
nicht: [],
pflichten: ["Unverzüglich melden"],
},
},
steuer: {
betrag: 320,
zeitraum: "jährlich",
faellig: "2027-04-01",
grundlage: "Hubraum und CO₂-Ausstoß",
lastschrift: true,
finanzamt: "München",
},
reifen: {
aktiv: "sommer",
anzugsmoment_nm: 140,
wechsel: { datum: "2026-10-15", vereinbart: false },
referenz_odo_km: 48250,
saetze: {
sommer: { km: 12000, mass: "275/30 R20", marke: "Michelin", druck_vorne: "2,5", druck_hinten: "2,4" },
winter: { km: 8000, mass: "265/35 R19", marke: "Continental", druck_vorne: "2,6", druck_hinten: "2,5" },
},
},
service: {
vereinbart: {},
autohaus: { name: "Audi Zentrum", adresse: "Musterweg 1", tel: "089 1234", mail: "a@b.de" },
buch: [
{ datum: "2026-02-10", km: 40000, art: "Ölwechsel", werkstatt: "Audi Zentrum" },
{ datum: "2025-03-05", km: 25000, art: "Inspektion", werkstatt: "Audi Zentrum" },
],
},
technik: [
{ gruppe: "Motor", posten: [["Bauart", "V6 Biturbo"], ["Leistung", "331 kW"]] },
],
ausstattung: [{ gruppe: "RS-Paket", sonder: ["RS competition"], serie: ["Klimaautomatik"] }],
}
export const beispielFahrten: Fahrt[] = [
{
trip_id: "t1",
ts_start: "2026-08-10T08:00:00+02:00",
ts_end: "2026-08-10T08:45:00+02:00",
duration_s: 2700,
distance_km: 42.5,
km_quelle: "odometer",
odo_start: 48200,
odo_end: 48242.5,
art: "arbeitsweg",
source: "ha",
status: "vollständig",
},
{
trip_id: "t2",
ts_start: "2026-08-09T23:10:00+02:00",
ts_end: "2026-08-09T23:40:00+02:00",
duration_s: 1800,
distance_km: 18.2,
km_quelle: "odometer",
odo_start: 48180,
odo_end: 48198.2,
art: "privat",
source: "manual",
status: "offen",
},
]
export const beispielTankvorgaenge: Tankvorgang[] = [
{
tank_id: "f1",
ts: "2026-08-08T17:20:00+02:00",
liters: 48.7,
fuel_total_eur: 89.12,
price_per_l: 1.83,
station_name: "Shell München Ost",
station_address: "Musterstraße 5",
product_name: "V-Power",
odometer_km: 48100,
distance_km: 520,
receipt_file: "beleg-2026-08-08.pdf",
receipt_no: "4711",
discount: 3.4,
source: "beleg",
status: "vollständig",
},
]
/** Datenschicht-Ersatz für Tests: liefert Beispieldaten, schreibt ins Leere. */
export function beispielApi(): DataMetricApi {
const horcher = { verbindung: [] as ((z: string) => void)[] }
return {
rest: {
zustandLesen: async () => ({
entity_id: "sensor.audi_dashboard_fahrzeugstatus",
state: "aktuell",
attributes: { daten: beispielStatus },
last_changed: "2026-08-11T09:00:00+00:00",
last_updated: "2026-08-11T09:00:00+00:00",
}),
datenLesen: async () => [],
dienstAufrufen: async () => null,
verbindungPruefen: async () => ({ message: "API running." }),
zugangSetzen: () => {},
},
live: {
aufVerbindung: (h: (z: string) => void) => {
horcher.verbindung.push(h)
h("verbunden")
return () => {}
},
aufZustand: () => () => {},
starten: async () => {},
beenden: () => {},
},
warteschlange: {
laden: async () => {},
aufAenderung: (h: (a: unknown[]) => void) => {
h([])
return () => {}
},
anzahl: 0,
},
profilLesen: async () => beispielProfil,
fahrtenLesen: async () => beispielFahrten,
tankvorgaengeLesen: async () => beispielTankvorgaenge,
fahrzeugstatusLesen: async () => beispielStatus,
profilSchreiben: async () => null,
belegHochladen: async () => null,
fahrtAnlegen: async () => null,
fahrtLoeschen: async () => null,
tankvorgangAnlegen: async () => null,
tankvorgangAktualisieren: async () => null,
tankvorgangLoeschen: async () => null,
jetztAktualisieren: async () => null,
} as unknown as DataMetricApi
}