110 lines
No EOL
3.9 KiB
Python
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 |