# đ Logic Spec â Vehicle Registration Documents ## Modul cĂ©lja Ă©s Masterbook 2 illeszkedĂ©s **CĂ©l:** A forgalmi engedĂ©ly szĂĄma, Ă©rvĂ©nyessĂ©gi ideje Ă©s a törzskönyv szĂĄma mezĆk hiĂĄnyĂĄnak pĂłtlĂĄsa a teljes adatfolyamban (adatbĂĄzis â API szint â Frontend UI). **Masterbook 2 illeszkedĂ©s:** A Thick Asset Digital Twin filozĂłfiĂĄba illeszkedik â minden adminisztratĂv adatot közvetlenĂŒl az Asset modellben tĂĄrolunk, nem JSONB-ben. --- ## Adatmodell ### Ăj mezĆk az Asset modellben | MezĆ | TĂpus | SQL tĂpus | KötelezĆ | AlapĂ©rtelmezett | |------|-------|-----------|----------|-----------------| | `registration_certificate_number` | `Optional[str]` | `VARCHAR(50)` | Nem | `None` | | `registration_certificate_validity` | `Optional[datetime]` | `DateTime(timezone=True)` | Nem | `None` | | `vehicle_registration_document_number` | `Optional[str]` | `VARCHAR(50)` | Nem | `None` | ### MiĂ©rt nem JSONB? Ezek strukturĂĄlt, kereshetĆ admin adatok, amelyek: - KĂŒlön lekĂ©rdezhetĆk (WHERE registration_certificate_number = '...') - IndexelhetĆk - ĂrvĂ©nyesĂthetĆk (pl. string hossz, dĂĄtum formĂĄtum) - Nincsenek elrejtve a szabad formĂĄtumĂș JSONB-ben --- ## 1. LĂ©pĂ©s: AdatbĂĄzis modell bĆvĂtĂ©se **FĂĄjl:** `backend/app/models/vehicle/asset.py` ### MĂłdosĂtĂĄs Az `Asset` osztĂĄlyhoz (a warranty mezĆk utĂĄn, a `notes` elĆtt) hozzĂĄadandĂł: ```python # === REGISTRATION DOCUMENTS === registration_certificate_number: Mapped[Optional[str]] = mapped_column( String(50), nullable=True, default=None, comment="Forgalmi engedĂ©ly szĂĄma" ) registration_certificate_validity: Mapped[Optional[datetime]] = mapped_column( DateTime(timezone=True), nullable=True, default=None, comment="Forgalmi engedĂ©ly Ă©rvĂ©nyessĂ©gi ideje" ) vehicle_registration_document_number: Mapped[Optional[str]] = mapped_column( String(50), nullable=True, default=None, comment="Törzskönyv szĂĄma" ) ``` ### Sync ```bash docker exec -it sf_api python -m app.scripts.sync_engine ``` --- ## 2. LĂ©pĂ©s: Pydantic sĂ©mĂĄk bĆvĂtĂ©se **FĂĄjl:** `backend/app/schemas/asset.py` ### AssetResponse (32. sor utĂĄn) ```python # === REGISTRATION DOCUMENTS === registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedĂ©ly szĂĄma") registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedĂ©ly Ă©rvĂ©nyessĂ©gi ideje") vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szĂĄma") ``` ### AssetCreate (a warranty utĂĄn, 233. sor környĂ©kĂ©n) ```python # === REGISTRATION DOCUMENTS === registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedĂ©ly szĂĄma") registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedĂ©ly Ă©rvĂ©nyessĂ©gi ideje") vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szĂĄma") ``` ### AssetUpdate (a warranty utĂĄn, 375. sor környĂ©kĂ©n) ```python # === REGISTRATION DOCUMENTS === registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedĂ©ly szĂĄma") registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedĂ©ly Ă©rvĂ©nyessĂ©gi ideje") vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szĂĄma") ``` --- ## 3. LĂ©pĂ©s: Asset Service bĆvĂtĂ©se **FĂĄjl:** `backend/app/services/asset_service.py` ### MĂłdosĂtĂĄs a create_or_claim_vehicle() metĂłdusban A 219-es sor elĆtt (a `first_registration_date` utĂĄn) az `asset_fields` dict-be: ```python # Registration Documents 'registration_certificate_number': asset_data.registration_certificate_number, 'registration_certificate_validity': asset_data.registration_certificate_validity, 'vehicle_registration_document_number': asset_data.vehicle_registration_document_number, ``` --- ## 4. LĂ©pĂ©s: Frontend â Vehicle Store bĆvĂtĂ©se **FĂĄjl:** `frontend/src/stores/vehicle.ts` ### MĂłdosĂtĂĄs a Vehicle interfĂ©szben (a 88-89. sor környĂ©kĂ©n) ```typescript // Registration Documents registration_certificate_number?: string | null registration_certificate_validity?: string | null vehicle_registration_document_number?: string | null ``` --- ## 5. LĂ©pĂ©s: Frontend â VehicleFormModal bĆvĂtĂ©se **FĂĄjl:** `frontend/src/components/dashboard/VehicleFormModal.vue` ### 5a. Form state bĆvĂtĂ©se (a 1779-es sor utĂĄn) ```typescript // Registration Documents registration_certificate_number: '', registration_certificate_validity: '', vehicle_registration_document_number: '', ``` ### 5b. Admin Tab UI bĆvĂtĂ©se (a 1006-os sor elĆtt, a warranty szekciĂł utĂĄn) ```html