# đŸ—ïž P0 Architect Report: Backend API & Validation Audit — Vehicle Management & Finance **DĂĄtum:** 2026-06-21 **Auditor:** Rendszer-Architect **StĂĄtusz:** Read-Only Audit (KĂłdmĂłdosĂ­tĂĄs nĂ©lkĂŒl) **Scope:** Vehicle CRUD, Pydantic Schemas, Fleet Finance Endpoints --- ## Executive Summary KĂ©t kritikus gapet azonosĂ­tottam a Backend API Ă©s a Database Modellek között: ### 🔮 Critical Gap #1 — 6 HiĂĄnyzĂł InternationalizĂĄciĂłs MezƑ a SchemĂĄkbĂłl Ă©s Service LogikĂĄbĂłl Az `Asset` modell (backend/app/models/vehicle/asset.py:147) tartalmaz 6 Ășj mezƑt (`registration_country`, `first_domestic_registration_date`, `import_country`, `title_document_number`, `engine_number`, `number_of_previous_owners`), amelyek: - **HiĂĄnyoznak** az `AssetCreate` (backend/app/schemas/asset.py:122) Ă©s `AssetUpdate` (backend/app/schemas/asset.py:269) Pydantic sĂ©mĂĄkbĂłl - **HiĂĄnyoznak** a `create_or_claim_vehicle()` service metĂłdus `asset_fields` dict-jĂ©bƑl (backend/app/services/asset_service.py:172-224) - **HiĂĄnyoznak** az update logikĂĄbĂłl (backend/app/services/asset_service.py) ### 🔮 Critical Gap #2 — ZERO API Endpoint a Fleet Finance Modellekhez A `fleet_finance` sĂ©ma 4 modellje (`AssetFinancials`, `VehicleInsurancePolicy`, `VehicleTaxObligation`, `InsuranceProvider`) rendelkezik adatbĂĄzis tĂĄblĂĄkkal, de: - **0 Pydantic schema** lĂ©tezik hozzĂĄjuk (a schemas/finance.py csak `Issuer` sĂ©mĂĄkat tartalmaz) - **0 API endpoint** lĂ©tezik hozzĂĄjuk (az endpoints/finance_admin.py csak Issuer managementet tartalmaz) - `AssetFinancials` csak a `create_or_claim_vehicle()` ĂĄltal kerĂŒl inicializĂĄlĂĄsra (nullĂĄkkal Ă©s `financing_type="unknown"`), de SOHA nem frissĂ­thetƑ az API-n keresztĂŒl --- ## 1. Section: Vehicle Schemas and Endpoints Status ### 1.1 ValĂłdi VĂ©gpont LokĂĄciĂł ⚠ **Critical finding:** A `endpoints/vehicles.py` fĂĄjl NEM a jĂĄrmƱ CRUD-ot tartalmazza, hanem kizĂĄrĂłlag szociĂĄlis Ă©rtĂ©kelĂ©seket (`VehicleUserRating`). A tĂ©nyleges jĂĄrmƱ CRUD a `endpoints/assets.py` fĂĄjlban talĂĄlhatĂł: - `POST /api/v1/assets/vehicles` → `create_or_claim_vehicle()` (backend/app/api/v1/endpoints/assets.py:502) - `PUT /api/v1/assets/vehicles/{asset_id}` → `update_vehicle()` (backend/app/api/v1/endpoints/assets.py:606) - `GET /api/v1/assets/vehicles` → `get_user_vehicles()` (backend/app/api/v1/endpoints/assets.py:223) - `GET /api/v1/assets/vehicles/{vehicle_id}` → `get_vehicle()` (backend/app/api/v1/endpoints/assets.py:439) ### 1.2 HiĂĄnyzĂł MezƑk MĂĄtrixa | MezƑ | Asset Modell | AssetCreate Schema | AssetUpdate Schema | Service Logika | |------|-------------|-------------------|-------------------|---------------| | `registration_country` (ISO 3166-1 alpha-2) | ✅ (line 147) | ❌ | ❌ | ❌ | | `first_domestic_registration_date` | ✅ (line 151) | ❌ | ❌ | ❌ | | `import_country` (ISO 3166-1 alpha-2) | ✅ (line 155) | ❌ | ❌ | ❌ | | `title_document_number` | ✅ (line 159) | ❌ | ❌ | ❌ | | `engine_number` | ✅ (line 163) | ❌ | ❌ | ❌ | | `number_of_previous_owners` | ✅ (line 167) | ❌ | ❌ | ❌ | ### 1.3 MeglĂ©vƑ ValidĂĄtorok Állapota Az `AssetCreate` sĂ©ma jelenleg az alĂĄbbi validĂĄtorokat tartalmazza: - `empty_str_to_none` — minden string mezƑre (backend/app/schemas/asset.py:134) - `normalize_brand` / `normalize_model` — brand/model normalizĂĄlĂĄs (backend/app/schemas/asset.py:143) - `normalize_individual_equipment` — equipment lista normalizĂĄlĂĄs (backend/app/schemas/asset.py:159) - `validate_vin_or_plate` — VIN vagy rendszĂĄm kötelezƑsĂ©g (backend/app/schemas/asset.py:183) - `determine_status` — alapĂ©rtelmezett DRAFT stĂĄtusz (backend/app/schemas/asset.py:249) **HiĂĄnyzĂł validĂĄtorok az Ășj mezƑkhöz:** - `registration_country`: ISO 3166-1 alpha-2 formĂĄtum validĂĄtor (2 karakter, nagybetƱ) - `import_country`: ISO 3166-1 alpha-2 formĂĄtum validĂĄtor - `first_domestic_registration_date`: nem lehet jövƑbeli dĂĄtum - `number_of_previous_owners`: >= 0 integer validĂĄciĂł --- ## 2. Section: Financial Endpoints Status ### 2.1 Fleet Finance Modellek — Orphan Analysis | Modell | DB TĂĄbla LĂ©tezik? | Pydantic Schema? | API Endpoint? | API-n elĂ©rhetƑ? | |--------|------------------|-----------------|---------------|-----------------| | `AssetFinancials` (backend/app/models/fleet_finance/models.py:141) | ✅ | ❌ | ❌ | ❌ (csak create-nĂ©l inicializĂĄlva) | | `InsuranceProvider` (backend/app/models/fleet_finance/models.py:180) | ✅ | ❌ | ❌ | ❌ | | `VehicleInsurancePolicy` (backend/app/models/fleet_finance/models.py:208) | ✅ | ❌ | ❌ | ❌ | | `VehicleTaxObligation` (backend/app/models/fleet_finance/models.py:252) | ✅ | ❌ | ❌ | ❌ | ### 2.2 AssetFinancials InicializĂĄlĂĄs A `create_or_claim_vehicle()` (backend/app/services/asset_service.py:273) az alĂĄbbi mĂłdon hozza lĂ©tre az `AssetFinancials` rekordot: ``` financials = AssetFinancials( asset_id=asset.id, purchase_price_net=Decimal("0"), purchase_price_gross=Decimal("0"), down_payment=Decimal("0"), monthly_installment=Decimal("0"), residual_value=Decimal("0"), financing_type="unknown" ) ``` Ez a rekord SOHA nem frissĂ­thetƑ az API-n keresztĂŒl, mert: - Nincs `PATCH /assets/{asset_id}/financials` vĂ©gpont - Nincs `PUT /assets/{asset_id}/financials` vĂ©gpont ### 2.3 MeglĂ©vƑ Finance VĂ©gpontok A `endpoints/expenses.py` tartalmazza az `AssetCost` CRUD-ot (költsĂ©g tĂ­pusĂș adatok), de a pĂ©nzĂŒgyi/finanszĂ­rozĂĄsi adatok teljesen hiĂĄnyoznak. A `endpoints/finance_admin.py` csak `Issuer` menedzsmentet tartalmaz (kibocsĂĄtĂłk kezelĂ©se), semmi köze a fleet finance modelljeihez. ### 2.4 MeglĂ©vƑ Pydantic SchĂ©mĂĄk a Finance Domainben - `schemas/finance.py` — csak `IssuerResponse` Ă©s `IssuerUpdate` - `schemas/fleet.py` — csak `EventCreate` Ă©s `TCOStats` (minimĂĄlis) --- ## 3. Section: Frontend Form Data Structure Recommendations A jelenlegi frontend `VehicleFormModal.vue` formĂĄja nem tartalmazza a 6 hiĂĄnyzĂł internationalizĂĄciĂłs mezƑt, Ă©s nem kommunikĂĄl a fleet finance modellekkel. ### AjĂĄnlott Payload CsoportosĂ­tĂĄs Az Ășj frontend form structure az alĂĄbbi logikai csoportokra bonthatĂł: **A csoport — Alapadatok (Basic Info)** - `brand`, `model`, `generation_name`, `trim_level`, `year` - `license_plate`, `vin` - `vehicle_class`, `body_type` **B csoport — RegisztrĂĄciĂłs adatok (Registration)** - `registration_country` (ISO 3166-1 alpha-2 dropdown) - `first_domestic_registration_date` (datepicker) - `registration_certificate_number` - `registration_certificate_validity` - `vehicle_registration_document_number` - `title_document_number` **C csoport — Import adatok (Import)** - `import_country` (ISO 3166-1 alpha-2 dropdown) - `engine_number` **D csoport — TulajdonlĂĄs (Ownership)** - `number_of_previous_owners` - `color`, `mileage`, `fuel_type`, `transmission_type` - `individual_equipment` **E csoport — PĂ©nzĂŒgyi adatok (Financials) — ÚJ endpoint** - `purchase_price_net` / `purchase_price_gross` - `down_payment`, `monthly_installment`, `residual_value` - `financing_type`, `financing_provider`, `contract_number` - `interest_rate`, `lease_start_date`, `lease_end_date` **F csoport — BiztosĂ­tĂĄs Ă©s AdĂł (Insurance & Tax) — ÚJ endpoint** - `insurance_type`, `policy_number`, `start_date`, `expiry_date`, `premium_amount`, `provider_id` - `tax_type`, `tax_year`, `amount`, `due_date`, `payment_status` ### API VĂ©gpont Javaslatok A frontend szĂĄmĂĄra az alĂĄbbi Ășj REST vĂ©gpontokra lenne szĂŒksĂ©g: 1. `PATCH /api/v1/assets/vehicles/{asset_id}/financials` — AssetFinancials frissĂ­tĂ©se 2. `GET /api/v1/assets/vehicles/{asset_id}/financials` — AssetFinancials lekĂ©rĂ©se 3. `POST /api/v1/assets/vehicles/{asset_id}/insurance` — BiztosĂ­tĂĄsi kötvĂ©ny hozzĂĄadĂĄsa 4. `GET /api/v1/assets/vehicles/{asset_id}/insurance` — BiztosĂ­tĂĄsi kötvĂ©nyek listĂĄzĂĄsa 5. `POST /api/v1/assets/vehicles/{asset_id}/tax` — AdĂłkötelezettsĂ©g hozzĂĄadĂĄsa 6. `GET /api/v1/assets/vehicles/{asset_id}/tax` — AdĂłkötelezettsĂ©gek listĂĄzĂĄsa --- ## 4. Section: Recommended Action Plan ### Phase 1 — Backend (Backend API javĂ­tĂĄsok) | # | Feladat | Érintett fĂĄjl(ok) | Priority | |---|---------|-------------------|----------| | 1 | Add 6 hiĂĄnyzĂł mezƑt az `AssetCreate` Ă©s `AssetUpdate` sĂ©mĂĄkhoz | schemas/asset.py | P0 | | 2 | Add ISO 3166-1 alpha-2 validĂĄtor a `registration_country` Ă©s `import_country` mezƑkhöz | schemas/asset.py | P0 | | 3 | Add `first_domestic_registration_date` jövƑbeli dĂĄtum tiltĂĄs | schemas/asset.py | P0 | | 4 | EgĂ©szĂ­tsd ki a `create_or_claim_vehicle()` logikĂĄt a 6 Ășj mezƑvel | services/asset_service.py | P0 | | 5 | Hozd lĂ©tre az `AssetFinancialsUpdate` Pydantic sĂ©mĂĄt | schemas/finance.py (Ășj) | P1 | | 6 | Hozd lĂ©tre a `VehicleInsurancePolicyCreate/Response` sĂ©mĂĄkat | schemas/finance.py (Ășj) | P1 | | 7 | Hozd lĂ©tre a `VehicleTaxObligationCreate/Response` sĂ©mĂĄkat | schemas/finance.py (Ășj) | P1 | | 8 | ImplementĂĄld a `PATCH /assets/{asset_id}/financials` vĂ©gpontot | endpoints/assets.py (Ășj) | P1 | | 9 | ImplementĂĄld a `POST/GET /assets/{asset_id}/insurance` vĂ©gpontokat | endpoints/assets.py (Ășj) | P1 | | 10 | ImplementĂĄld a `POST/GET /assets/{asset_id}/tax` vĂ©gpontokat | endpoints/assets.py (Ășj) | P1 | ### Phase 2 — Frontend (UI komponensek bƑvĂ­tĂ©se) | # | Feladat | Érintett komponens | Priority | |---|---------|-------------------|----------| | 1 | BƑvĂ­tsd a `VehicleFormModal.vue` Ʊrlapot a B, C, D csoport mezƑivel | VehicleFormModal.vue | P1 | | 2 | Hozz lĂ©tre egy Ășj `FinancialsTab.vue` komponenst (E csoport) | (Ășj fĂĄjl) | P1 | | 3 | Hozz lĂ©tre egy Ășj `InsuranceTaxTab.vue` komponenst (F csoport) | (Ășj fĂĄjl) | P1 | | 4 | IntegrĂĄld az Ășj tabeket a `VehicleDetailModal.vue` komponensbe | VehicleDetailModal.vue | P1 | --- ## Appendix: Audited Files | FĂĄjl | Sorok | Tartalom | |------|-------|----------| | backend/app/api/v1/endpoints/vehicles.py | 1-143 | ❌ Csak social ratings, NEM vehicle CRUD | | backend/app/api/v1/endpoints/assets.py | 1-1231 | ✅ ValĂłdi vehicle CRUD | | backend/app/schemas/asset.py | 1-453 | ✅ AssetCreate, AssetUpdate, AssetResponse | | backend/app/schemas/vehicle.py | 1-56 | ❌ Csak social rating sĂ©mĂĄk | | backend/app/models/vehicle/asset.py | 1-515 | ✅ Asset modell a 6 Ășj mezƑvel | | backend/app/services/asset_service.py | 1-802 | ✅ create_or_claim_vehicle (hiĂĄnyzĂł 6 mezƑ) | | backend/app/api/v1/endpoints/finance_admin.py | 1-77 | ❌ Csak Issuer management | | backend/app/api/v1/endpoints/expenses.py | 1-418 | ✅ AssetCost CRUD (de nem fleet finance) | | backend/app/schemas/finance.py | 1-43 | ❌ Csak Issuer sĂ©mĂĄk | | backend/app/schemas/fleet.py | 1-20 | ❌ MinimĂĄlis (EventCreate, TCOStats) | | backend/app/models/fleet_finance/models.py | 1-286 | ✅ 4 fleet finance modell (API nĂ©lkĂŒl) | --- *Ez a report egy read-only audit eredmĂ©nye. KĂłdmĂłdosĂ­tĂĄs nem törtĂ©nt. A frontend redesign csak az Architect jĂłvĂĄhagyĂĄsa utĂĄn kezdƑdhet.*