from pydantic import BaseModel, Field from typing import Optional, Dict, Any class ScopeOfWork(BaseModel): summary_tasks_deliverables: Optional[str] = None key_dates: Optional[str] = None key_kpis: Optional[str] = None class TermsAndTermination(BaseModel): duration: Optional[str] = None termination_conditions: Optional[str] = None penalties: Optional[str] = None class PaymentTerms(BaseModel): payment_method: Optional[str] = None payment_schedule: Optional[str] = None pricing_details: Optional[str] = None mark_ups: Optional[str] = None payment_schedules: Optional[str] = None late_payment_penalties: Optional[str] = None discounts: Optional[str] = None class LiabilityIndemnification(BaseModel): responsibilities_liabilities: Optional[str] = None damages_losses: Optional[str] = None indemnification_clauses: Optional[str] = None class Confidentiality(BaseModel): scope: Optional[str] = None duration: Optional[str] = None exceptions: Optional[str] = None disclosures_by_law: Optional[str] = None breach_consequences: Optional[str] = None class IntellectualProperty(BaseModel): licensor: Optional[str] = None licensee: Optional[str] = None terms_renewal: Optional[str] = None pricing: Optional[str] = None definitions: Optional[str] = None scope: Optional[str] = None duration: Optional[str] = None territory: Optional[str] = None use_ownership_rights: Optional[str] = None class DisputeResolution(BaseModel): methods: Optional[str] = None mediation_options: Optional[str] = None arbitration_options: Optional[str] = None litigation_options: Optional[str] = None class WarrantiesRepresentations(BaseModel): service_standards: Optional[str] = None service_assurances: Optional[str] = None class ComplianceWithLaws(BaseModel): relevant_laws: Optional[str] = None owner_obligations: Optional[str] = None class AmendmentsVersions(BaseModel): change_management: Optional[str] = None written_consent: Optional[str] = None class AssignmentSubcontracting(BaseModel): delegation_assignment: Optional[str] = None class ContractSummary(BaseModel): """Complete contract summary schema matching the reference implementation""" # Basic contract information contract_type: Optional[str] = None overview_purpose: Optional[str] = None relevant_account: Optional[str] = None in_studio_name: Optional[str] = None client_sender_name: Optional[str] = None client_sender_address: Optional[str] = None agency_name: Optional[str] = None agency_address: Optional[str] = None dates_signed: Optional[str] = None terms: Optional[str] = None date_expired: Optional[str] = None pricing_payment_terms: Optional[str] = None # Complex nested sections scope_of_work: Optional[ScopeOfWork] = None terms_and_termination: Optional[TermsAndTermination] = None payment_terms: Optional[PaymentTerms] = None liability_indemnification: Optional[LiabilityIndemnification] = None confidentiality: Optional[Confidentiality] = None intellectual_property: Optional[IntellectualProperty] = None dispute_resolution: Optional[DisputeResolution] = None warranties_representations: Optional[WarrantiesRepresentations] = None compliance_with_laws: Optional[ComplianceWithLaws] = None amendments_versions: Optional[AmendmentsVersions] = None assignment_subcontracting: Optional[AssignmentSubcontracting] = None class Config: json_encoders = { type(None): lambda v: "N/A (Not found in Doc)" } class ContractSummaryResponse(BaseModel): """Response model for contract summary API""" success: bool summary: Optional[ContractSummary] = None status: str filename: Optional[str] = None created_at: Optional[str] = None updated_at: Optional[str] = None error: Optional[str] = None