"""Schémas Phase 1 — Saisies hebdomadaires.""" from pydantic import BaseModel from datetime import date, datetime from uuid import UUID from typing import Optional # ── S1 Collecte ── class CollecteCreate(BaseModel): date_collecte: date montant: float detenteur_id: UUID # qui a l'argent reunion_id: Optional[UUID] = None class CollecteOut(BaseModel): id: UUID date_collecte: date montant: float detenteur_prenom: Optional[str] = None statut: str saisi_par_prenom: Optional[str] = None confirme_par_prenom: Optional[str] = None date_confirmation: Optional[datetime] = None recu_par_prenom: Optional[str] = None date_reception: Optional[date] = None cree_le: datetime model_config = {"from_attributes": True} class CollecteUpdate(BaseModel): montant: Optional[float] = None # ── Opérations bancaires ── class OperationBancaireCreate(BaseModel): type: str = "depot" montant: float date_operation: date note: Optional[str] = None class OperationBancaireOut(BaseModel): id: UUID type: str montant: float date_operation: date effectue_par_prenom: str note: Optional[str] = None cree_le: datetime model_config = {"from_attributes": True} class ReserveCreate(BaseModel): nom: str montant: float note: Optional[str] = None class ReserveUpdate(BaseModel): nom: Optional[str] = None montant: Optional[float] = None note: Optional[str] = None class ReserveOut(BaseModel): id: UUID nom: str montant: float note: Optional[str] = None active: bool = True cree_le: datetime model_config = {"from_attributes": True} class SoldesOut(BaseModel): encaisse: float # cash reçu par trésorier, pas encore déposé compte_bancaire: float # dépôts - dépenses payées - contributions en_possession: float # collectes pas encore remises au trésorier en_possession_details: list[dict] = [] # ── S4 Rapport de réunion ── class ReunionCreate(BaseModel): type: str = "reguliere" date_reunion: datetime theme: Optional[str] = None annonces: Optional[list[str]] = None note: Optional[str] = None class ReunionOut(BaseModel): id: UUID type: str date_reunion: datetime animateur_prenom: Optional[str] = None theme: Optional[str] = None annonces: Optional[list[str]] = None note: Optional[str] = None cree_le: datetime model_config = {"from_attributes": True} # ── S5 Dépense (ouvert à tous) ── class DepenseCreate(BaseModel): date_depense: date montant: float quoi: str # qui = auto (membre courant) # methode renseignée par le trésorier à la confirmation class DepenseOut(BaseModel): id: UUID date_depense: date montant: float qui_prenom: Optional[str] = None quoi: str paye: bool methode: Optional[str] = None preuve_nom: Optional[str] = None saisi_par_prenom: Optional[str] = None confirme: bool = False cree_le: datetime model_config = {"from_attributes": True} class DepenseUpdate(BaseModel): paye: Optional[bool] = None methode: Optional[str] = None quoi: Optional[str] = None