from datetime import datetime from typing import List from enum import Enum from pydantic import BaseModel, Field from beanie import Document class ContractType(str, Enum): individual = 'individual' corporation = 'corporation' class PartyTemplate(BaseModel): entity_id: str part: str name: str address: str class ClauseTemplate(Document): name: str body: str created_at: datetime = Field(default=datetime.utcnow(), nullable=False) updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False) class ContractTemplate(Document): id: str type: ContractType parties: List[PartyTemplate] clauses: List[ClauseTemplate] created_at: datetime = Field(default=datetime.utcnow(), nullable=False) updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)