import abc
from typing import List, Dict, Any, BinaryIO
from datetime import datetime

class BaseBankStatementParser(abc.ABC):
    """
    Abstract base class for all bank statement parsers.
    """
    
    @abc.abstractmethod
    def parse(self, file_content: BinaryIO, filename: str) -> List[Dict[str, Any]]:
        """
        Parse the given file content and return a list of transaction dictionaries.
        Expected dictionary keys:
        - transaction_date: datetime
        - transaction_reference: str (optional)
        - description: str
        - debit_amount_vnd: float (default 0)
        - credit_amount_vnd: float (default 0)
        - running_balance_vnd: float (optional)
        """
        pass
