"""Interprétation des valeurs de cellule : disponibilités et tailles de t-shirt.""" from app.importing.text import normalize from app.models import AvailabilityStatus, TshirtSize _AVAILABLE = { "x", "o", "oui", "y", "yes", "ok", "1", "vrai", "true", "dispo", "disponible", "present", "presente", "matin", "aprem", "apres-midi", "apres midi", "midi", "soir", "soiree", "journee", "jour", } _IF_NEEDED = { "si besoin", "sib", "peut-etre", "peut etre", "?", "2", "backup", "reserve", "au besoin", } _UNAVAILABLE = { "non", "n", "no", "0", "faux", "false", "indispo", "indisponible", "absent", "-", "x-", } _EMPTY = {"", "na", "n/a", "nc"} _TSHIRT = { "XS": TshirtSize.XS, "S": TshirtSize.S, "M": TshirtSize.M, "L": TshirtSize.L, "XL": TshirtSize.XL, "XXL": TshirtSize.XXL, "2XL": TshirtSize.XXL, "XXXL": TshirtSize.XXXL, "3XL": TshirtSize.XXXL, } def parse_availability_cell(value: str) -> tuple[AvailabilityStatus | None, bool]: """(statut, reconnu). - statut `None` + reconnu `True` → cellule vide, pas de déclaration. - statut `None` + reconnu `False` → valeur non comprise, à signaler. """ norm = normalize(value) if norm in _EMPTY: return None, True if norm in _AVAILABLE: return AvailabilityStatus.AVAILABLE, True if norm in _IF_NEEDED: return AvailabilityStatus.IF_NEEDED, True if norm in _UNAVAILABLE: return AvailabilityStatus.UNAVAILABLE, True return None, False def parse_tshirt_size(value: str) -> TshirtSize | None: key = normalize(value).upper().replace(" ", "").replace("-", "") return _TSHIRT.get(key)