""" Module : lien.engine.certificate_engine.py Description : Moteur de génération de certificat conforme Loi P-38.1 QC """ from ..models.animal import AnimalSchema, TierLevel, AnimalStatus from datetime import datetime def validate_and_upgrade(animal: AnimalSchema) -> bool: """Vérifie les paliers requis pour l'animal avant la transaction légale""" # Règle 1 : Tout animal doit avoir une microchippée selon la loi if not animal.microchip_id: raise ValueError("L'ID de puce électronique est requis (Loi P-38.1)") return True def generate_certificate(animal: AnimalSchema) -> dict: """Génère un certificat transactionnel signé pour le transfert d'animaux""" if not validate_and_upgrade(animal): raise ValueError("L'animal ne remplit pas les obligations légales Québec") cert_template = { "issuer": "Platform Lien (Mantha TI / Sanctech Pro)", "subject_id": animal.id, "current_tier": animal.current_tier.value, "date_of_certification": datetime.now().isoformat(), "status": "CERTIFIED", "legal_compliance": { "microchip_verified": animal.microchip_id is not None, "vaccines_complete": True if animal.current_tier != TierLevel.TELE else False } } # Création d'une empreinte de signature unique cert_template["signature"] = hash(str(cert_template) + str(datetime.now().isoformat())) return cert_template