groupe-meditation/backend/app/schemas/phase5.py
Daniel Allaire 69309acd13 Intégrer rencontres et assemblées pilotées par tuiles
Refond les pages Rencontres et Assemblées autour de tuiles ouvrables avec actions locales, PDF serveur, ventes, collectes, présences, décisions, postes et contributions.

Ajoute les invitations publiques d'assemblée en lecture seule avec lien expirant, l'adoption formelle du rapport du trésorier avec proposeur/secondeur, et bloque les contributions tant que ce rapport n'est pas adopté.

Uniformise la navigation et les entêtes, retire les modules redondants des contextes, ajoute la création de comptes membres par exécutif et les données démo reliées aux nouveaux processus.

Ce commit capture un lot fonctionnel important; une refactorisation ciblée du module Assemblées, puis Trésorerie/Gouvernance, est maintenant pertinente pour isoler les règles métier et faciliter les tests.
2026-05-31 09:02:02 -04:00

66 lines
2 KiB
Python

"""Schémas Phase 5 — Jetons, Anniversaires, Commande jetons."""
from pydantic import BaseModel
from datetime import date, datetime
from uuid import UUID
from typing import Optional
# ── S2 Remise de jeton ──
class JetonCreate(BaseModel):
membre_id: Optional[UUID] = None # None pour jeton de désir anonyme
reunion_id: Optional[UUID] = None
type_jeton: str # desir, 24h, 1mois, 2mois, 3mois, 6mois, 9mois, 1an, multiple
date_remise: date
annees: Optional[int] = None # requis si type_jeton='multiple'
class VenteJetonCreate(BaseModel):
reunion_id: Optional[UUID] = None
type_jeton: str
quantite: int
montant: float
date_vente: date
vendu_par_id: Optional[UUID] = None
class JetonOut(BaseModel):
id: UUID
membre_prenom: Optional[str] = None
type_jeton: str
date_remise: date
annees: Optional[int] = None
remis_par_prenom: Optional[str] = None
cree_le: datetime
model_config = {"from_attributes": True}
# ── C3 Anniversaires district ──
class AnniversaireOut(BaseModel):
membre_prenom: str
groupe_nom: str
date_abstinence: date
annees_sobriete: int
prochain_anniversaire: date
jours_restants: int
# ── M6 Commande de jetons ──
class StockJetonsOut(BaseModel):
type_jeton: str
label: str
remis_dernier_mois: int
stock_suggestion: str # "OK" ou "Bas — commander"
TYPES_JETONS = [
{"value": "desir", "label": "Désir", "emoji": "💫", "ordre": 1},
{"value": "24h", "label": "24 heures", "emoji": "🌅", "ordre": 2},
{"value": "1mois", "label": "1 mois", "emoji": "🥉", "ordre": 3},
{"value": "2mois", "label": "2 mois", "emoji": "🥉", "ordre": 4},
{"value": "3mois", "label": "3 mois", "emoji": "🥈", "ordre": 5},
{"value": "6mois", "label": "6 mois", "emoji": "🥈", "ordre": 6},
{"value": "9mois", "label": "9 mois", "emoji": "🥇", "ordre": 7},
{"value": "1an", "label": "1 an", "emoji": "⭐", "ordre": 8},
{"value": "multiple", "label": "Multiple", "emoji": "🏆", "ordre": 9},
]