Files
benevoles/backend/app/validation/__init__.py
T
AdamThomasandClaude Sonnet 5 c96e85af37 Étape 4 : moteur de validation des affectations
- Module pur app/validation/ : aucune dépendance à la base, entrée
  ValidationInput (dataclasses), sortie list[Violation] (code + params, pas
  de phrase)
- 5 règles conformes à CLAUDE.md § 3 :
  SHIFT_OVERLAP (bloquante), OUTSIDE_AVAILABILITY, DAILY_HOURS_EXCEEDED,
  INSUFFICIENT_REST, MISSING_REQUIRED_SKILL (avertissements)
- Sémantique figée : bornes strictes (créneaux jointifs non chevauchants),
  frontière de journée au 1er DayPart, cumul > 8 h strict, repos < 8 h strict,
  statuts PROPOSED/CONFIRMED côté appelant
- has_blocking() pour l'appelant
- TDD : 23 tests, un cas passant + un cas déclenchant par règle + cas limites
  (minuit, frontière de journée, multi-créneaux, combinaisons) ; couverture 99 %
- Clés de traduction validation.<CODE> dans locales/fr.json

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
2026-09-09 22:44:09 +02:00

28 lines
549 B
Python

"""Moteur de validation des affectations — cœur du produit.
Voir CLAUDE.md § 3 pour les règles et la sémantique.
"""
from app.validation.engine import has_blocking, validate
from app.validation.models import (
AvailabilityDeclaration,
DayPartWindow,
Severity,
ShiftInfo,
ValidationInput,
Violation,
ViolationCode,
)
__all__ = [
"AvailabilityDeclaration",
"DayPartWindow",
"Severity",
"ShiftInfo",
"ValidationInput",
"Violation",
"ViolationCode",
"has_blocking",
"validate",
]