39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
"""
|
|
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 |