from dataclasses import dataclass, field from datetime import datetime from typing import List, Optional @dataclass class OfferLogEntry: """Represents a single audit snapshot from merchant_offers_lock.""" id: int offer_id: int created_at: Optional[datetime] archived_by: Optional[int] archived_by_name: Optional[str] @dataclass class DisbursementPhaseEntry: """Represents one disbursement phase from the disbursement_offers table.""" id: int offer_id: int phase: Optional[int] per_disbursement_amount: Optional[float] day_from_disbursement_date: Optional[int] disbursement_at: Optional[str] @dataclass class MerchantOffer: """Domain entity for a merchant financing offer.""" id: int merchant_id: int interest_type_id: Optional[int] = None payment_frequency: Optional[int] = None tenure: Optional[int] = None advance_emi: Optional[int] = None interest_rate: Optional[float] = None subvention: Optional[float] = None processing_fee: Optional[float] = None processing_fee_type: Optional[str] = None advance_type: Optional[str] = None status: Optional[int] = None reason: Optional[str] = None disable_offer_status: Optional[int] = None subvention_type_id: Optional[int] = None monthly_irr: Optional[float] = None annualised_irr: Optional[float] = None disbursement_method: Optional[int] = None disbursement_at: Optional[str] = None processing_fee_first_emi: Optional[int] = None offer_log: List[OfferLogEntry] = field(default_factory=list) disbursement_phases: List[DisbursementPhaseEntry] = field(default_factory=list)