5.9 KiB
5.9 KiB
Odometer Rendszer Duplikáció Audit Jelentés
Dátum: 2026-06-12 Auditor: Rendszer-Architect Gitea Issue: #258
Összefoglaló
A vizsgálat feltárta, hogy az odometer (kilométeróra) adatok több helyen és több formában vannak tárolva a rendszerben, ami duplikációhoz és architekturális inkonzisztenciához vezet.
1. Összes Odometer-rel Kapcsolatos Elem
1.1 Különálló Táblák
| # | Tábla (Schema) | Modell | Fájl | Elsődleges Entitás |
|---|---|---|---|---|
| 1 | vehicle.odometer_readings |
OdometerReading |
backend/app/models/vehicle/asset.py:347 |
Asset (járműpéldány) |
| 2 | vehicle.vehicle_odometer_states |
VehicleOdometerState |
backend/app/models/vehicle/vehicle.py:112 |
VehicleModelDefinition (katalógus) |
| 3 | vehicle.asset_telemetry |
AssetTelemetry (current_mileage) |
backend/app/models/vehicle/asset.py:338 |
Asset (járműpéldány) |
1.2 Oszlopok Más Táblákban
| # | Tábla | Oszlop | Fájl |
|---|---|---|---|
| 4 | vehicle.costs |
odometer |
backend/app/models/vehicle/vehicle.py:97 |
| 5 | vehicle.asset_events |
odometer_reading |
backend/app/models/vehicle/asset.py:400 |
| 6 | marketplace.costs |
odometer_km |
backend/app/models/marketplace/service.py:172 |
2. Részletes Elemzés
2.1 OdometerReading (asset.py:347)
- Cél: Km óra állás időbeli nyomonkövetése. Minden egyes leolvasás külön rekord.
- Adatbázis séma:
vehicle.odometer_readings(id, asset_id, reading, recorded_at, source, cost_id) - Forrás:
manual,api,telemetry,cost_entry - Kötődés:
vehicle.assets(Asset) - konkrét járműpéldány - FK:
odometer_readings_asset_id_fkey→vehicle.assets.id
2.2 VehicleOdometerState (vehicle.py:112)
- Cél: Okos odometer - becsült aktuális km állás, napi átlag, konfidencia score.
- Adatbázis séma:
vehicle.vehicle_odometer_states(vehicle_id PK, last_recorded_odometer, last_recorded_date, daily_avg_distance, estimated_current_odometer, confidence_score, manual_override_avg) - Kötődés:
vehicle.vehicle_model_definitions(VehicleModelDefinition) - katalógusrekord - FK:
vehicle_odometer_states_vehicle_id_fkey→vehicle.vehicle_model_definitions.id - Adatforrás: Kizárólag a
VehicleCost.odometermezőből számol (odometer_service.py:59-62)
2.3 AssetTelemetry.current_mileage (asset.py:338)
- Cél: Telemetriai adat tárolása.
- Kötődés:
vehicle.assets(Asset) - konkrét járműpéldány - Nincs integrálva sem az
OdometerReading, sem aVehicleOdometerStaterendszerrel.
2.4 VehicleCost.odometer (vehicle.py:97)
- Cél: Költségbejegyzéshez tartozó km állás (NOT NULL).
- Kötődés:
vehicle.vehicle_model_definitions(VehicleModelDefinition) - Funkció: Ez az adatforrása a
VehicleOdometerStateszámításnak.
2.5 AssetEvent.odometer_reading (asset.py:400)
- Cél: Digitális szervizkönyv eseményhez tartozó km állás.
- Kötődés:
vehicle.assets(Asset) - Nincs integrálva semmilyen más odometer rendszerrel.
2.6 marketplace.costs.odometer_km
- Cél: Marketplace szolgáltatás árához tartozó km állás.
- Teljesen elkülönült rendszer.
3. A Duplikáció Leírása
3.1 Két Párhuzamos Odometer Rendszer
A) Asset-alapú Odometer Rendszer (komplett, de kihasználatlan)
- Tábla:
vehicle.odometer_readings - Használat: Csak
expenses.py:108-127hoz létreOdometerReadingrekordot költség rögzítésekor. - Kötődés:
Asset(konkrét jármű) - Státusz: Létezik, de nincs kihasználva a VehicleOdometerState számára.
B) Vehicle-definition-alapú Odometer Rendszer (aktív, de hibás)
- Tábla:
vehicle.vehicle_odometer_states - Service:
odometer_service.py- teljes funkcionalitás - Kötődés:
VehicleModelDefinition(katalógusrekord) - Adatforrás:
VehicleCost.odometer(szintén vehicle-definition-hez kötött) - Státusz: Működik, de architekturálisan hibás, mert egy katalógusrekordhoz rendel km állást.
3.2 Architekturális Következmények
- Adatvesztés: Az Asset-hez tartozó
OdometerReadingadatok nincsenek felhasználva a VehicleOdometerState számításban. - Inkonzisztens adat: Telemetriából vagy manuális bevitelből származó km adatok nem kerülnek be a VehicleOdometerState-ba.
- Entitás zavar: A
VehicleModelDefinitionegy katalógusrekord, aminek NINCS km óra állása. - Több forrás, nincs szinkron: AssetTelemetry, OdometerReading, AssetEvent mind Asset-hez kötött, de nincsenek szinkronizálva.
4. Mermaid Diagram
graph TD
subgraph "ASSET-alapú (konkrét jármű)"
A[Asset] --> OR[OdometerReading<br/>vehicle.odometer_readings]
A --> AT[AssetTelemetry<br/>current_mileage]
A --> AE[AssetEvent<br/>odometer_reading]
end
subgraph "VEHICLE-DEFINITION-alapú (katalógus)"
VMD[VehicleModelDefinition] --> VOS[VehicleOdometerState<br/>vehicle.vehicle_odometer_states]
VMD --> VC[VehicleCost<br/>odometer]
end
subgraph "SZOLGÁLTATÁS"
OS[OdometerService<br/>odometer_service.py] -->|számol| VC
OS -.->|NEM használja| OR
end
subgraph "MARKETPLACE (elkülönült)"
MC[Marketplace Cost<br/>odometer_km]
end
style VOS fill:#f96,stroke:#333,stroke-width:2px
style OR fill:#9cf,stroke:#333,stroke-width:2px
style OS fill:#ff9,stroke:#333,stroke-width:2px
5. Javaslat
- A
VehicleOdometerState-ot át kell kötni azAssetentitáshoz. - Az
OdometerService-nek azOdometerReadingtáblából kellene számolnia. - Az
AssetTelemetry.current_mileageésAssetEvent.odometer_readingintegrálni kell azOdometerReadingrendszerbe. - A
marketplace.costs.odometer_kmegységesítése.