"""Stable domain and UI configuration kept outside the presentation layer.""" from __future__ import annotations from dataclasses import dataclass from benchmark_grouped import FAULT_LABELS, FREQ_COLS, LABELS, NOT_APPLICABLE, SEVERITIES ALLOWED_ENGINE_SIZES = (8, 12, 16) MAX_UPLOAD_BYTES = 10 * 1024 * 1024 MAX_MISSING_FRACTION_PER_CYLINDER = 0.50 LABEL_DISPLAY = { "ok": "Sprawny", "zakoksowany": "Zakoksowany", "lejacy": "Lejący", "pompa": "Pompa", "iglica": "Iglica", "unknown": "Nieznana anomalia", } SEVERITY_DISPLAY = { NOT_APPLICABLE: "Nie dotyczy", "male": "Małe", "srednie": "Średnie", "duze": "Duże", } LABEL_COLORS = { "ok": "#38d996", "zakoksowany": "#f5a524", "lejacy": "#ff6b57", "pompa": "#a78bfa", "iglica": "#28b7d9", "unknown": "#d56cff", } LABEL_ICONS = { "ok": "●", "zakoksowany": "▲", "lejacy": "◆", "pompa": "■", "iglica": "⬟", "unknown": "?", } RECOMMENDATIONS = { "ok": "Brak natychmiastowej interwencji. Kontynuuj standardowy harmonogram kontroli.", "zakoksowany": "Sprawdź nagar na końcówce wtryskiwacza i jakość rozpylania. Rozważ czyszczenie oraz ponowny pomiar.", "lejacy": "Skontroluj szczelność wtryskiwacza, przelew i ciśnienie paliwa. Ogranicz dalszą pracę przy dużym nasileniu.", "pompa": "Zweryfikuj ciśnienie pompy, stabilność zasilania i przewody paliwowe przed wymianą elementów.", "iglica": "Sprawdź ruch iglicy, opory mechaniczne oraz charakter rozpylania wtryskiwacza.", "unknown": "Wynik jest anomalny, lecz nie pasuje pewnie do znanych sygnatur. Wykonaj pomiar kontrolny i diagnostykę manualną.", } @dataclass(frozen=True) class AppConfig: allowed_engine_sizes: tuple[int, ...] = ALLOWED_ENGINE_SIZES max_upload_bytes: int = MAX_UPLOAD_BYTES max_missing_fraction_per_cylinder: float = MAX_MISSING_FRACTION_PER_CYLINDER __all__ = [ "AppConfig", "FAULT_LABELS", "FREQ_COLS", "LABELS", "NOT_APPLICABLE", "SEVERITIES", ]