""" Financial Interfaces - Absztrakt alaposztályok a fizetési és számlázási szolgáltatásokhoz. Ez a modul definiálja a kötelező interfészeket, amelyeket minden konkrét implementációnak követnie kell a fizetési átjárók és számlázási szolgáltatások esetében. """ from abc import ABC, abstractmethod from typing import Optional, Dict, Any from decimal import Decimal class BasePaymentGateway(ABC): """ Absztrakt osztály fizetési átjárók számára. Minden fizetési szolgáltató (Stripe, PayPal, stb.) implementálja ezt az interfészt, hogy a FinancialOrchestrator egységesen kezelhesse őket. """ @abstractmethod async def create_intent( self, amount: Decimal, currency: str = "HUF", metadata: Optional[Dict[str, Any]] = None, **kwargs ) -> Dict[str, Any]: """ Fizetési szándék létrehozása a külső szolgáltatónál. Args: amount: A fizetendő összeg currency: Pénznem (alapértelmezett: HUF) metadata: Egyéni metaadatok **kwargs: További paraméterek a konkrét implementáció számára Returns: Szótár a fizetési szándék adataival (pl. client_secret, id, status) Raises: PaymentGatewayError: Ha a fizetési szándék létrehozása sikertelen """ pass @abstractmethod async def verify_payment( self, payment_intent_id: str, **kwargs ) -> Dict[str, Any]: """ Fizetés státuszának ellenőrzése a külső szolgáltatónál. Args: payment_intent_id: A fizetési szándék azonosítója **kwargs: További paraméterek Returns: Szótár a fizetés részleteivel (pl. status, amount, customer) Raises: PaymentGatewayError: Ha az ellenőrzés sikertelen """ pass @abstractmethod async def refund_payment( self, payment_intent_id: str, amount: Optional[Decimal] = None, **kwargs ) -> Dict[str, Any]: """ Fizetés visszatérítése. Args: payment_intent_id: A fizetési szándék azonosítója amount: Visszatérítendő összeg (ha None, akkor teljes összeg) **kwargs: További paraméterek Returns: Szótár a visszatérítés részleteivel Raises: PaymentGatewayError: Ha a visszatérítés sikertelen """ pass class BaseInvoicingService(ABC): """ Absztrakt osztály számlázási szolgáltatások számára. Minden számlázási rendszer (számlázz.hu, NAV Online Számla, stb.) implementálja ezt az interfészt a számlák egységes kezeléséhez. """ @abstractmethod async def issue_invoice( self, issuer_id: int, customer_data: Dict[str, Any], items: list[Dict[str, Any]], **kwargs ) -> Dict[str, Any]: """ Szála kiállítása. Args: issuer_id: A számlakiállító (Issuer) azonosítója customer_data: Ügyfél adatok (név, cím, adószám, stb.) items: Számla tételek listája **kwargs: További paraméterek Returns: Szótár a számla részleteivel (pl. invoice_number, issue_date, total_amount) Raises: InvoicingError: Ha a számla kiállítása sikertelen """ pass @abstractmethod async def get_invoice_status( self, invoice_id: str, **kwargs ) -> Dict[str, Any]: """ Számla státuszának lekérdezése. Args: invoice_id: A számla azonosítója **kwargs: További paraméterek Returns: Szótár a számla státuszával és további adatokkal Raises: InvoicingError: Ha a státusz lekérdezése sikertelen """ pass @abstractmethod async def cancel_invoice( self, invoice_id: str, reason: Optional[str] = None, **kwargs ) -> Dict[str, Any]: """ Számla érvénytelenítése. Args: invoice_id: A számla azonosítója reason: Érvénytelenítés oka **kwargs: További paraméterek Returns: Szótár az érvénytelenítés eredményével Raises: InvoicingError: Ha az érvénytelenítés sikertelen """ pass # Egyéni kivételek a finanszírozási szolgáltatásokhoz class FinancialServiceError(Exception): """Alap kivétel az összes finanszírozási szolgáltatási hibához.""" pass class PaymentGatewayError(FinancialServiceError): """Kivétel fizetési átjáró hibákhoz.""" pass class InvoicingError(FinancialServiceError): """Kivétel számlázási hibákhoz.""" pass class InsufficientFundsError(FinancialServiceError): """Kivétel elégtelen egyenleg esetén.""" pass