contract-query/backend/app/models/contract_summary.py
2025-08-14 15:03:33 -05:00

110 lines
No EOL
3.9 KiB
Python

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