groupe-meditation/backend/app/schemas/phase1.py
2026-04-17 04:04:04 -04:00

113 lines
2.8 KiB
Python

"""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 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