from pydantic import BaseModel from decimal import Decimal from datetime import datetime from typing import Optional, List class AccountingPeriod(BaseModel): """Model pentru perioada contabilă""" an: Optional[int] = None luna: Optional[int] = None class BankCashRegister(BaseModel): """Model pentru Registrul de Casă și Bancă""" nume: str nract: Optional[int] = None dataact: Optional[datetime] = None nume_cont_bancar: str # din vbalanta_parteneri.nume incasari: Decimal plati: Decimal sold: Decimal valuta: Optional[str] = None tip_registru: str # "BANCA LEI", "CASA VALUTA" etc explicatia: str class RegisterFilter(BaseModel): """Filtre pentru registrul de casă și bancă""" company: str register_type: Optional[str] = None # BANCA_LEI, BANCA_VALUTA, CASA_LEI, CASA_VALUTA sau None pentru toate luna: Optional[int] = None # Luna contabilă (1-12) pentru PACK_SESIUNE an: Optional[int] = None # Anul contabil pentru PACK_SESIUNE date_from: Optional[datetime] = None date_to: Optional[datetime] = None partner_name: Optional[str] = None bank_account: Optional[str] = None # Filter for specific bank/cash account (bancasa) page: int = 1 page_size: int = 50 class RegisterListResponse(BaseModel): """Răspuns pentru lista din registru""" registers: List[BankCashRegister] total_count: int filtered_count: int total_incasari: Decimal total_plati: Decimal page: int page_size: int has_more: bool accounting_period: Optional[AccountingPeriod] = None # Totaluri din TOATE înregistrările filtrate (nu doar pagina curentă) sold_precedent_all: Decimal = Decimal('0.00') total_incasari_all: Decimal = Decimal('0.00') total_plati_all: Decimal = Decimal('0.00') sold_final_all: Decimal = Decimal('0.00')