diff --git a/database/models/universign.py b/database/models/universign.py index 8b34ba3..fcb0ffa 100644 --- a/database/models/universign.py +++ b/database/models/universign.py @@ -50,7 +50,7 @@ class LocalDocumentStatus(str, Enum): class SageDocumentType(int, Enum): DEVIS = 0 - BON_COMMANDE = 10 + BON_COMMANDE = 10 PREPARATION = 20 BON_LIVRAISON = 30 BON_RETOUR = 40 @@ -61,8 +61,7 @@ class SageDocumentType(int, Enum): class UniversignTransaction(Base): __tablename__ = "universign_transactions" - # === IDENTIFIANTS === - id = Column(String(36), primary_key=True) # UUID local + id = Column(String(36), primary_key=True) transaction_id = Column( String(255), unique=True, @@ -71,7 +70,6 @@ class UniversignTransaction(Base): comment="ID Universign (ex: tr_abc123)", ) - # === LIEN AVEC LE DOCUMENT SAGE === sage_document_id = Column( String(50), nullable=False, @@ -82,7 +80,6 @@ class UniversignTransaction(Base): SQLEnum(SageDocumentType), nullable=False, comment="Type de document Sage" ) - # === STATUTS UNIVERSIGN (SOURCE DE VÉRITÉ) === universign_status = Column( SQLEnum(UniversignTransactionStatus), nullable=False, @@ -94,7 +91,6 @@ class UniversignTransaction(Base): DateTime, nullable=True, comment="Dernière MAJ du statut Universign" ) - # === STATUT LOCAL (DÉDUIT) === local_status = Column( SQLEnum(LocalDocumentStatus), nullable=False, @@ -103,7 +99,6 @@ class UniversignTransaction(Base): comment="Statut métier simplifié pour l'UI", ) - # === URLS ET MÉTADONNÉES UNIVERSIGN === signer_url = Column(Text, nullable=True, comment="URL de signature") document_url = Column(Text, nullable=True, comment="URL du document signé") @@ -125,17 +120,14 @@ class UniversignTransaction(Base): certificate_url = Column(Text, nullable=True, comment="URL du certificat") - # === SIGNATAIRES === signers_data = Column( Text, nullable=True, comment="JSON des signataires (snapshot)" ) - # === INFORMATIONS MÉTIER === requester_email = Column(String(255), nullable=True) requester_name = Column(String(255), nullable=True) document_name = Column(String(500), nullable=True) - # === DATES CLÉS === created_at = Column( DateTime, default=datetime.now, @@ -150,14 +142,12 @@ class UniversignTransaction(Base): expired_at = Column(DateTime, nullable=True) canceled_at = Column(DateTime, nullable=True) - # === SYNCHRONISATION === last_synced_at = Column( DateTime, nullable=True, comment="Dernière sync réussie avec Universign" ) sync_attempts = Column(Integer, default=0, comment="Nombre de tentatives de sync") sync_error = Column(Text, nullable=True) - # === FLAGS === is_test = Column( Boolean, default=False, comment="Transaction en environnement .alpha" ) @@ -166,7 +156,6 @@ class UniversignTransaction(Base): ) webhook_received = Column(Boolean, default=False, comment="Webhook Universign reçu") - # === RELATION === signers = relationship( "UniversignSigner", back_populates="transaction", cascade="all, delete-orphan" ) @@ -174,7 +163,6 @@ class UniversignTransaction(Base): "UniversignSyncLog", back_populates="transaction", cascade="all, delete-orphan" ) - # === INDEXES COMPOSITES === __table_args__ = ( Index("idx_sage_doc", "sage_document_id", "sage_document_type"), Index("idx_sync_status", "needs_sync", "universign_status"), @@ -190,10 +178,6 @@ class UniversignTransaction(Base): class UniversignSigner(Base): - """ - Détail de chaque signataire d'une transaction - """ - __tablename__ = "universign_signers" id = Column(String(36), primary_key=True) @@ -204,33 +188,27 @@ class UniversignSigner(Base): index=True, ) - # === DONNÉES SIGNATAIRE === email = Column(String(255), nullable=False, index=True) name = Column(String(255), nullable=True) phone = Column(String(50), nullable=True) - # === STATUT === status = Column( SQLEnum(UniversignSignerStatus), default=UniversignSignerStatus.WAITING, nullable=False, ) - # === ACTIONS === viewed_at = Column(DateTime, nullable=True) signed_at = Column(DateTime, nullable=True) refused_at = Column(DateTime, nullable=True) refusal_reason = Column(Text, nullable=True) - # === MÉTADONNÉES === ip_address = Column(String(45), nullable=True) user_agent = Column(Text, nullable=True) signature_method = Column(String(50), nullable=True) - # === ORDRE === order_index = Column(Integer, default=0) - # === RELATION === transaction = relationship("UniversignTransaction", back_populates="signers") def __repr__(self): @@ -238,10 +216,6 @@ class UniversignSigner(Base): class UniversignSyncLog(Base): - """ - Journal de toutes les synchronisations (audit trail) - """ - __tablename__ = "universign_sync_logs" id = Column(Integer, primary_key=True, autoincrement=True) @@ -252,22 +226,18 @@ class UniversignSyncLog(Base): index=True, ) - # === SYNC INFO === sync_type = Column(String(50), nullable=False, comment="webhook, polling, manual") sync_timestamp = Column(DateTime, default=datetime.now, nullable=False, index=True) - # === CHANGEMENTS DÉTECTÉS === previous_status = Column(String(50), nullable=True) new_status = Column(String(50), nullable=True) changes_detected = Column(Text, nullable=True, comment="JSON des changements") - # === RÉSULTAT === success = Column(Boolean, default=True) error_message = Column(Text, nullable=True) http_status_code = Column(Integer, nullable=True) response_time_ms = Column(Integer, nullable=True) - # === RELATION === transaction = relationship("UniversignTransaction", back_populates="sync_logs") def __repr__(self): @@ -287,7 +257,6 @@ class UniversignConfig(Base): api_url = Column(String(500), nullable=False) api_key = Column(String(500), nullable=False, comment="À chiffrer") - # === OPTIONS === webhook_url = Column(String(500), nullable=True) webhook_secret = Column(String(255), nullable=True)