import datetime
import decimal

from _typeshed import Incomplete
from sqlalchemy.orm import DeclarativeBase, Mapped as Mapped, MappedAsDataclass

from abacus_models.core.mixins import (
    AuditMixin as AuditMixin,
    BaseMixin as BaseMixin,
    CreateMixin as CreateMixin,
    SoftDeleteMixin as SoftDeleteMixin,
    UpdateMixin as UpdateMixin,
)
from abacus_models.core.types import (
    NormalizedDate as NormalizedDate,
    NormalizedDateTime as NormalizedDateTime,
)

class Base(MappedAsDataclass, DeclarativeBase, BaseMixin): ...

class AbacusOutbox(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    abacus_outbox_id: Mapped[int]
    target_type: Mapped[str]
    target_id: Mapped[int]
    event_type: Mapped[str]
    correlation_id: Mapped[str]
    status: Mapped[str]
    retry_count: Mapped[int]
    max_retries: Mapped[int]
    created_at: Mapped[datetime.datetime]
    last_modified: Mapped[datetime.datetime]
    details: Mapped[dict | None]
    next_retry_at: Mapped[datetime.datetime | None]
    error_message: Mapped[str | None]
    processed_at: Mapped[datetime.datetime | None]

class AbacusState(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    abacus_state_id: Mapped[int]
    parent_table_id: Mapped[int]
    action_name: Mapped[str]
    action_status: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    parent_table_name: Mapped[str | None]
    message: Mapped[str | None]
    abacus_state_history: Mapped[list['AbacusStateHistory']]

class Account(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_id: Mapped[int]
    account_name: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    sap_created_at: Mapped[datetime.datetime | None]
    account_payment_term: Mapped[list['AccountPaymentTerm']]
    account_tax_info: Mapped[list['AccountTaxInfo']]
    payment_hold: Mapped[list['PaymentHold']]
    report_custom: Mapped[list['ReportCustom']]
    statement_attachment: Mapped[list['StatementAttachment']]
    account_payee: Mapped[list['AccountPayee']]
    account_payment_term_history: Mapped[list['AccountPaymentTermHistory']]
    account_tax_info_history: Mapped[list['AccountTaxInfoHistory']]
    payment_group_payment_account: Mapped[list['PaymentGroupPaymentAccount']]
    payment_hold_history: Mapped[list['PaymentHoldHistory']]
    account_contract: Mapped[list['AccountContract']]
    account_contract_vat_detail: Mapped[list['AccountContractVatDetail']]
    account_payee_history: Mapped[list['AccountPayeeHistory']]
    ledger_account: Mapped[list['LedgerAccount']]
    ledger_account_contract: Mapped[list['LedgerAccountContract']]
    ledger_adjustment: Mapped[list['LedgerAdjustment']]
    ledger_adjustment_detail: Mapped[list['LedgerAdjustmentDetail']]
    ledger_contract_flowthrough: Mapped[list['LedgerContractFlowthrough']]
    ledger_deposit: Mapped[list['LedgerDeposit']]
    ledger_vat_summary: Mapped[list['LedgerVatSummary']]
    payee_collaborator: Mapped[list['PayeeCollaborator']]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    worksheet_correction: Mapped[list['WorksheetCorrection']]
    worksheet_flowthrough: Mapped[list['WorksheetFlowthrough']]
    worksheet_payment_custom: Mapped[list['WorksheetPaymentCustom']]
    worksheet_tax_correction: Mapped[list['WorksheetTaxCorrection']]
    worksheet_tax_correction_vat: Mapped[list['WorksheetTaxCorrectionVat']]
    ledger_account_contract_current_balance: Mapped[
        list['LedgerAccountContractCurrentBalance']
    ]
    ledger_account_current_balance: Mapped[list['LedgerAccountCurrentBalance']]
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]
    ledger_contract_advance_applied: Mapped[list['LedgerContractAdvanceApplied']]
    ledger_contract_flowthrough_current_balance: Mapped[
        list['LedgerContractFlowthroughCurrentBalance']
    ]
    ledger_correction: Mapped[list['LedgerCorrection']]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]
    ledger_reserve_release_schedule: Mapped[list['LedgerReserveReleaseSchedule']]
    worksheet_account_contract_payable_after_tax: Mapped[
        list['WorksheetAccountContractPayableAfterTax']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]
    payment_group_payment_account_detail: Mapped[
        list['PaymentGroupPaymentAccountDetail']
    ]
    worksheet_account_contract_payable_details: Mapped[
        list['WorksheetAccountContractPayableDetails']
    ]

class AccountPayeeKycNotificationHistory(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    account_payee_kyc_notification_history_id: Mapped[int]
    account_payee_kyc_notification_id: Mapped[int]
    account_payee_id: Mapped[int]
    file_upload_link: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    requirement_id: Mapped[str | None]
    requirement_type_id: Mapped[int | None]
    sub_requirement_id: Mapped[str | None]
    possible_sub_requirement_types: Mapped[str | None]
    sub_requirement_status_id: Mapped[int | None]
    entity_reference_id: Mapped[str | None]
    entity_reference_type_id: Mapped[int | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]

class AccountPayeeTaxFormInfoHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    account_payee_tax_form_info_history_id: Mapped[int]
    account_payee_tax_form_info_id: Mapped[int]
    tax_form_type: Mapped[str]
    account_payee_id: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    revision_id: Mapped[str | None]
    signed_date: Mapped[datetime.date | None]
    expiration_date: Mapped[datetime.date | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]

class AccountPaymentTermTemplate(Base):
    __tablename__: str
    account_payment_term_template_id: Mapped[int]
    template_name: Mapped[str]
    currency_code: Mapped[str]
    payment_terms: Mapped[dict]

class AccountingProcessLock(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    accounting_process_lock_id: Mapped[int]
    is_active: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    notes: Mapped[str | None]
    accounting_process_lock_history: Mapped[list['AccountingProcessLockHistory']]

class ContractFlowthroughHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    contract_flowthrough_history_id: Mapped[int]
    contract_flowthrough_id: Mapped[int]
    contract_id: Mapped[int]
    reference_flowthrough_calculation_id: Mapped[int]
    flowthrough_rate: Mapped[decimal.Decimal]
    flowthrough_status: Mapped[str]
    has_automatic_shutoff: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    recoupment_cap: Mapped[int | None]
    previous_flowthrough_status: Mapped[str | None]
    status_last_modified_by: Mapped[str | None]
    status_last_modified: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class ContractLifecycleHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    contract_lifecycle_history_id: Mapped[int]
    contract_lifecycle_id: Mapped[int]
    contract_id: Mapped[int]
    contract_lifecycle_schedule_id: Mapped[int]
    lifecycle_status: Mapped[str]
    lifecycle_term_start: Mapped[datetime.date]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    lifecycle_term_end: Mapped[datetime.date | None]
    renewal_effective: Mapped[datetime.date | None]
    termination_notice_deadline: Mapped[datetime.date | None]
    termination_notice_received: Mapped[datetime.date | None]
    termination_effective: Mapped[datetime.date | None]
    collection_start: Mapped[datetime.date | None]
    collection_end: Mapped[datetime.date | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class ContractLifecycleScheduleDetail(Base):
    __tablename__: str
    contract_lifecycle_schedule_detail_id: Mapped[int]
    period_interval: Mapped[int]
    period_type: Mapped[str]
    contract_lifecycle_schedule: Mapped[list['ContractLifecycleSchedule']]
    contract_lifecycle_schedule_: Mapped[list['ContractLifecycleSchedule']]
    contract_lifecycle_schedule1: Mapped[list['ContractLifecycleSchedule']]

class ContractMechanicalDeductionHistory(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    contract_mechanical_deduction_history_id: Mapped[int]
    contract_mechanical_deduction_id: Mapped[int]
    contract_id: Mapped[int]
    territory: Mapped[str]
    mechanical_type: Mapped[str]
    admin_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    admin_fee: Mapped[decimal.Decimal | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class ContractTermConditionHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    contract_term_condition_history_id: Mapped[int]
    contract_term_condition_id: Mapped[int]
    contract_term_id: Mapped[int]
    conditions: Mapped[dict]
    term_rate: Mapped[decimal.Decimal]
    priority: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_term_condition_name: Mapped[str | None]
    commission: Mapped[decimal.Decimal | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class ContractTermHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    contract_term_history_id: Mapped[int]
    contract_term_id: Mapped[int]
    contract_id: Mapped[int]
    term_type: Mapped[str]
    is_base_term: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_term_name: Mapped[str | None]
    attachments: Mapped[dict | None]
    attachments_relations: Mapped[dict | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class DeletedContract(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    deleted_contract_id: Mapped[int]
    contract_id: Mapped[int]
    contract_data: Mapped[dict]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]

class FileUploadConfig(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    file_upload_config_id: Mapped[int]
    upload_type: Mapped[str]
    s3_key_template: Mapped[str]
    max_file_size_bytes: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    allowed_file_types: Mapped[dict | None]
    multipart_threshold_bytes: Mapped[int | None]
    min_multipart_chunk_size_bytes: Mapped[int | None]
    event_name: Mapped[str | None]
    description: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    file_upload: Mapped[list['FileUpload']]

class HistoricalContractAdvance(Base):
    __tablename__: str
    __table_args__: Incomplete
    id: Mapped[int]
    oa_advance_id: Mapped[int]
    oa_contract_id: Mapped[int]
    account_id: Mapped[int]
    amount: Mapped[decimal.Decimal]
    currency_id: Mapped[int]
    currency: Mapped[str]
    due_type: Mapped[str]
    date_paid: Mapped[datetime.date | None]
    exchange_rate: Mapped[float | None]
    description: Mapped[str | None]
    apply_to_period_id: Mapped[int | None]

class JsonContractFileImportStatus(Base):
    __tablename__: str
    json_contract_file_import_status_id: Mapped[int]
    ingestion_date: Mapped[datetime.datetime]
    json_file_s3_path: Mapped[str]
    json_file_s3_version_id: Mapped[str]
    process_report_file_s3_path: Mapped[str]
    import_status: Mapped[str]
    overwrite: Mapped[int]
    ingestion_duration: Mapped[decimal.Decimal]
    contract_id: Mapped[int | None]
    contract_name: Mapped[str | None]
    failed_entities: Mapped[str | None]
    errors: Mapped[str | None]
    aws_username: Mapped[str | None]
    import_user: Mapped[str | None]
    jira_ticket: Mapped[str | None]
    account_id: Mapped[int | None]
    imported_entities: Mapped[str | None]

class OaTerritoryBackfilledAccounts(Base, AuditMixin, CreateMixin):
    __tablename__: str
    backfill_id: Mapped[int]
    accounts: Mapped[dict]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    audit_id: Mapped[str | None]

class PayeeHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    payee_history_id: Mapped[int]
    payee_id: Mapped[int]
    reference_payment_type_id: Mapped[int]
    payoneer_client_reference_id: Mapped[str]
    payoneer_program_id: Mapped[int]
    payee_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payoneer_assigned_id: Mapped[int | None]
    payee_name: Mapped[str | None]

class PayeeKycNotificationHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    payee_kyc_notification_history_id: Mapped[int]
    payee_kyc_notification_id: Mapped[int]
    payee_id: Mapped[int]
    file_upload_link: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    requirement_id: Mapped[str | None]
    requirement_type_id: Mapped[int | None]
    sub_requirement_id: Mapped[str | None]
    possible_sub_requirement_types: Mapped[str | None]
    sub_requirement_status_id: Mapped[int | None]
    entity_reference_id: Mapped[str | None]
    entity_reference_type_id: Mapped[int | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]

class PaymentAllocationHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    payment_allocation_history_id: Mapped[int]
    payment_allocation_id: Mapped[int]
    contract_id: Mapped[int]
    payee_type: Mapped[str]
    payee_id: Mapped[int]
    statement_period_id: Mapped[int]
    payment_allocation_type: Mapped[str]
    amount_to_payment: Mapped[decimal.Decimal]
    payment_status: Mapped[str]
    amount_to_ledger: Mapped[decimal.Decimal]
    ledger_status: Mapped[str]
    currency_code: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    payment_status_modified: Mapped[datetime.datetime | None]
    ledger_status_modified: Mapped[datetime.datetime | None]
    description: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]

class PaymentGroup(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    payment_group_id: Mapped[int]
    group_name: Mapped[str]
    is_reusable: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    group_criteria: Mapped[dict | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    payment_group_payment: Mapped[list['PaymentGroupPayment']]

class PaymentMinimum(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    payment_minimum_id: Mapped[int]
    currency_code: Mapped[str]
    check_amount: Mapped[decimal.Decimal]
    wire_transfer_amount: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    western_union_amount: Mapped[decimal.Decimal | None]

class ReferenceAdjustmentType(Base):
    __tablename__: str
    reference_adjustment_type_id: Mapped[int]
    type_name: Mapped[str]
    oa_category_name: Mapped[str]
    ledger_adjustment: Mapped[list['LedgerAdjustment']]
    ledger_adjustment_detail: Mapped[list['LedgerAdjustmentDetail']]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]

class ReferenceAdvancePaymentMethod(Base):
    __tablename__: str
    reference_advance_payment_method_id: Mapped[int]
    payment_method: Mapped[str]
    is_internal: Mapped[int | None]
    contract_advance: Mapped[list['ContractAdvance']]
    contract_advance_history: Mapped[list['ContractAdvanceHistory']]

class ReferenceAgreementType(Base):
    __tablename__: str
    reference_agreement_type_id: Mapped[int]
    agreement_type: Mapped[str]
    account_payment_term: Mapped[list['AccountPaymentTerm']]
    payment_entity_payoneer_program: Mapped[list['PaymentEntityPayoneerProgram']]

class ReferenceExternalSource(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    reference_external_source_id: Mapped[int]
    parent_table_id: Mapped[int]
    parent_table_name: Mapped[str]
    external_source_id: Mapped[str]
    external_source: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]

class ReferenceFlowthroughCalculation(Base):
    __tablename__: str
    reference_flowthrough_calculation_id: Mapped[int]
    flowthrough_calculation_name: Mapped[str]
    flowthrough_calculation: Mapped[str]
    flowthrough_calculation_example: Mapped[str]
    flowthrough_calculation_example_summary: Mapped[str]
    contract_flowthrough: Mapped[list['ContractFlowthrough']]

class ReferenceMechanicalRate(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    reference_mechanical_rate_id: Mapped[int]
    country_code: Mapped[str]
    base_rate: Mapped[decimal.Decimal]
    minute_rate: Mapped[decimal.Decimal]
    ringtone_rate: Mapped[decimal.Decimal]
    effective_start_date: Mapped[datetime.datetime]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]

class ReferencePayableDetailType(Base):
    __tablename__: str
    reference_payable_detail_type_id: Mapped[int]
    detail_type_name: Mapped[str]
    detail_group_name: Mapped[str]
    worksheet_tax_correction: Mapped[list['WorksheetTaxCorrection']]
    worksheet_tax_correction_vat: Mapped[list['WorksheetTaxCorrectionVat']]
    worksheet_account_contract_payable_details: Mapped[
        list['WorksheetAccountContractPayableDetails']
    ]

class ReferencePaymentEntity(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    reference_payment_entity_id: Mapped[int]
    payment_entity_name: Mapped[str]
    country_of_tax_reporting: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account_payment_term: Mapped[list['AccountPaymentTerm']]
    reference_signing_entity: Mapped[list['ReferenceSigningEntity']]
    statement_period_payment_entity: Mapped[list['StatementPeriodPaymentEntity']]
    account_payment_term_history: Mapped[list['AccountPaymentTermHistory']]
    payment_entity_payoneer_program: Mapped[list['PaymentEntityPayoneerProgram']]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]

class ReferencePaymentType(Base):
    __tablename__: str
    reference_payment_type_id: Mapped[int]
    payment_type: Mapped[str]
    payment_service: Mapped[str]
    is_internal: Mapped[int | None]
    notes: Mapped[str | None]
    reference_payoneer_program: Mapped[list['ReferencePayoneerProgram']]
    account_payee: Mapped[list['AccountPayee']]
    payee: Mapped[list['Payee']]
    contract_advance: Mapped[list['ContractAdvance']]
    contract_advance_history: Mapped[list['ContractAdvanceHistory']]

class ReferenceSapProfitCenter(Base):
    __tablename__: str
    __table_args__: Incomplete
    reference_sap_profit_center_id: Mapped[int]
    profit_center: Mapped[str]
    company_code: Mapped[str]
    display_name: Mapped[str]
    business_group: Mapped[str]
    reference_signing_entity: Mapped[list['ReferenceSigningEntity']]
    contract: Mapped[list['Contract']]
    contract_history: Mapped[list['ContractHistory']]
    signing_entity_sap_profit_center: Mapped[list['SigningEntitySapProfitCenter']]

class ReferenceTaxWithholding(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    reference_tax_withholding_id: Mapped[int]
    country_of_withholding: Mapped[str]
    tax_rate: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    country_of_tax_residence: Mapped[str | None]
    is_resource_provisioned: Mapped[int | None]

class ReferenceTransactionType(Base):
    __tablename__: str
    reference_transaction_type_id: Mapped[int]
    transaction_type_name: Mapped[str]
    transaction_type_code: Mapped[str]
    reference_transaction_type_group_transaction_type: Mapped[
        list['ReferenceTransactionTypeGroupTransactionType']
    ]

class ReferenceTransactionTypeGroup(Base):
    __tablename__: str
    reference_transaction_type_group_id: Mapped[int]
    transaction_type_group_name: Mapped[str | None]
    reference_transaction_type_group_transaction_type: Mapped[
        list['ReferenceTransactionTypeGroupTransactionType']
    ]

class ReferenceVatRate(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    reference_vat_rate_id: Mapped[int]
    vat_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    country_of_tax_residence: Mapped[str | None]
    country_of_tax_policy: Mapped[str | None]
    is_sba_signed: Mapped[int | None]
    is_tax_applicable: Mapped[int | None]
    is_vat_registered_in_country_of_tax_policy: Mapped[int | None]
    transaction_type: Mapped[str | None]
    tax_rate: Mapped[decimal.Decimal | None]
    effective_date: Mapped[datetime.date | None]

class ReferenceWorksheetFlowthroughError(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    error_code: Mapped[str]
    description: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]

class ReportPayment(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    report_payment_id: Mapped[int]
    target_id: Mapped[int]
    report_type: Mapped[str]
    report_export_url: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    target_type: Mapped[str | None]

class RunController(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    run_controller_id: Mapped[int]
    contract_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    run_controller_name: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    accounting_run: Mapped[list['AccountingRun']]
    contract_template: Mapped[list['ContractTemplate']]
    run_controller_contract: Mapped[list['RunControllerContract']]

class RunControllerContractHistory(Base, AuditMixin, CreateMixin, UpdateMixin):
    __tablename__: str
    run_controller_contract_history_id: Mapped[int]
    run_controller_contract_id: Mapped[int]
    run_controller_id: Mapped[int]
    contract_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    audit_id: Mapped[str | None]

class Schedule(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    schedule_id: Mapped[int]
    schedule_name: Mapped[str]
    target_type: Mapped[str]
    target_id: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    conditions: Mapped[dict | None]
    schedule_attachment: Mapped[list['ScheduleAttachment']]
    schedule_history: Mapped[list['ScheduleHistory']]
    contract_term_schedule: Mapped[list['ContractTermSchedule']]
    contract_term_schedule_history: Mapped[list['ContractTermScheduleHistory']]

class ScheduleAttachmentHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    schedule_attachment_history_id: Mapped[int]
    schedule_attachment_id: Mapped[int]
    schedule_id: Mapped[int]
    target_type: Mapped[str]
    target_id: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]

class StatementPeriod(Base):
    __tablename__: str
    statement_period_id: Mapped[int]
    statement_period_name: Mapped[str]
    statement_period_status: Mapped[str]
    statement_month: Mapped[int | None]
    statement_year: Mapped[int | None]
    closed_date: Mapped[datetime.datetime | None]
    closed_by: Mapped[str | None]
    abacus_event: Mapped[list['AbacusEvent']]
    accounting_period: Mapped[list['AccountingPeriod']]
    exchange_rate: Mapped[list['ExchangeRate']]
    payment_group_payment: Mapped[list['PaymentGroupPayment']]
    statement_attachment: Mapped[list['StatementAttachment']]
    statement_period_payment_entity: Mapped[list['StatementPeriodPaymentEntity']]
    vat_summary_file: Mapped[list['VatSummaryFile']]
    payment_group_payment_account: Mapped[list['PaymentGroupPaymentAccount']]
    payment_group_payment_account_: Mapped[list['PaymentGroupPaymentAccount']]
    statement_period_adjustment_file: Mapped[list['StatementPeriodAdjustmentFile']]
    worksheet_flowthrough_batch: Mapped[list['WorksheetFlowthroughBatch']]
    ledger_adjustment: Mapped[list['LedgerAdjustment']]
    ledger_adjustment_: Mapped[list['LedgerAdjustment']]
    ledger_adjustment_detail: Mapped[list['LedgerAdjustmentDetail']]
    ledger_adjustment_detail_: Mapped[list['LedgerAdjustmentDetail']]
    ledger_vat_summary: Mapped[list['LedgerVatSummary']]
    ledger_vat_summary_: Mapped[list['LedgerVatSummary']]
    payment_allocation: Mapped[list['PaymentAllocation']]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    worksheet_adjustment_: Mapped[list['WorksheetAdjustment']]
    worksheet_correction: Mapped[list['WorksheetCorrection']]
    worksheet_correction_: Mapped[list['WorksheetCorrection']]
    worksheet_flowthrough: Mapped[list['WorksheetFlowthrough']]
    worksheet_payment_custom: Mapped[list['WorksheetPaymentCustom']]
    worksheet_payment_custom_: Mapped[list['WorksheetPaymentCustom']]
    worksheet_tax_correction: Mapped[list['WorksheetTaxCorrection']]
    worksheet_tax_correction_vat: Mapped[list['WorksheetTaxCorrectionVat']]
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]
    ledger_contract_advance_applied: Mapped[list['LedgerContractAdvanceApplied']]
    ledger_correction: Mapped[list['LedgerCorrection']]
    ledger_correction_: Mapped[list['LedgerCorrection']]
    ledger_reserve_taken: Mapped[list['LedgerReserveTaken']]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]
    worksheet_adjustment_detail_: Mapped[list['WorksheetAdjustmentDetail']]
    worksheet_payment_contract_advance: Mapped[list['WorksheetPaymentContractAdvance']]
    worksheet_payment_contract_advance_: Mapped[list['WorksheetPaymentContractAdvance']]
    ledger_reserve_release_schedule: Mapped[list['LedgerReserveReleaseSchedule']]
    ledger_reserve_release_schedule_: Mapped[list['LedgerReserveReleaseSchedule']]
    worksheet_account_contract_payable_after_tax: Mapped[
        list['WorksheetAccountContractPayableAfterTax']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]
    ledger_reserve_release: Mapped[list['LedgerReserveRelease']]
    worksheet_account_contract_payable_details: Mapped[
        list['WorksheetAccountContractPayableDetails']
    ]

class TaxWithholdingOverrideHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    tax_withholding_override_history_id: Mapped[int]
    tax_withholding_override_id: Mapped[int]
    account_payee_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    rate_override: Mapped[decimal.Decimal | None]
    certificate_expiration_date: Mapped[datetime.date | None]
    message: Mapped[str | None]

class AbacusEvent(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    abacus_event_id: Mapped[int]
    event_name: Mapped[str]
    target_id: Mapped[int]
    event_date: Mapped[datetime.datetime]
    created_by: Mapped[str]
    statement_period_id: Mapped[int | None]
    target_type: Mapped[str | None]
    previous_abacus_event_id: Mapped[int | None]
    rolled_back_at: Mapped[datetime.datetime | None]
    statement_period: Mapped[StatementPeriod | None]
    ledger_account: Mapped[list['LedgerAccount']]
    ledger_account_contract: Mapped[list['LedgerAccountContract']]
    ledger_accounting_run_balance: Mapped[list['LedgerAccountingRunBalance']]
    ledger_accounting_run_vat: Mapped[list['LedgerAccountingRunVat']]
    ledger_adjustment: Mapped[list['LedgerAdjustment']]
    ledger_contract_flowthrough: Mapped[list['LedgerContractFlowthrough']]
    ledger_deposit: Mapped[list['LedgerDeposit']]
    ledger_vat_summary: Mapped[list['LedgerVatSummary']]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]
    ledger_contract_advance_applied: Mapped[list['LedgerContractAdvanceApplied']]
    ledger_correction: Mapped[list['LedgerCorrection']]
    ledger_reserve_taken: Mapped[list['LedgerReserveTaken']]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]
    ledger_reserve_release_schedule: Mapped[list['LedgerReserveReleaseSchedule']]
    worksheet_account_contract_payable_after_tax: Mapped[
        list['WorksheetAccountContractPayableAfterTax']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]
    ledger_reserve_release: Mapped[list['LedgerReserveRelease']]

class AbacusStateHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    abacus_state_history_id: Mapped[int]
    abacus_state_id: Mapped[int]
    parent_table_id: Mapped[int]
    action_name: Mapped[str]
    action_status: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    parent_table_name: Mapped[str | None]
    message: Mapped[str | None]
    abacus_state: Mapped['AbacusState']

class AccountPaymentTerm(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payment_term_id: Mapped[int]
    account_id: Mapped[int]
    currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payment_minimum: Mapped[decimal.Decimal | None]
    payment_entity_id: Mapped[int | None]
    agreement_type_id: Mapped[int | None]
    payment_schedule: Mapped[str | None]
    account: Mapped['Account']
    agreement_type: Mapped[ReferenceAgreementType | None]
    payment_entity: Mapped[ReferencePaymentEntity | None]
    account_payment_term_history: Mapped[list['AccountPaymentTermHistory']]

class AccountTaxInfo(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_tax_info_id: Mapped[int]
    account_id: Mapped[int]
    is_vat_exempt: Mapped[int]
    is_tax_treaty_claimed: Mapped[int]
    is_wht_applicable: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    country_of_tax_residence: Mapped[str | None]
    is_sba_signed: Mapped[int | None]
    tax_employment_type: Mapped[str | None]
    certificate_of_residence_expiration_date: Mapped[datetime.date | None]
    is_resident_of_spanish_islands: Mapped[int | None]
    wht_rate_override: Mapped[decimal.Decimal | None]
    account: Mapped['Account']
    account_tax_info_history: Mapped[list['AccountTaxInfoHistory']]

class AccountingPeriod(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    accounting_period_id: Mapped[int]
    statement_period_id: Mapped[int]
    accounting_period_status: Mapped[str]
    contract_type: Mapped[str]
    is_visible: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    accounting_period_name: Mapped[str | None]
    closed_date: Mapped[datetime.datetime | None]
    visible_reason: Mapped[str | None]
    statement_period: Mapped['StatementPeriod']
    accounting_period_report: Mapped[list['AccountingPeriodReport']]
    accounting_run: Mapped[list['AccountingRun']]
    sales_file: Mapped[list['SalesFile']]

class AccountingProcessLockHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    accounting_process_lock_history_id: Mapped[int]
    accounting_process_lock_id: Mapped[int]
    is_active: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    notes: Mapped[str | None]
    accounting_process_lock: Mapped['AccountingProcessLock']

class ExchangeRate(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    exchange_rate_id: Mapped[int]
    statement_period_id: Mapped[int]
    rate: Mapped[decimal.Decimal]
    from_currency_code: Mapped[str]
    to_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    statement_period: Mapped['StatementPeriod']

class FileUpload(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    file_upload_id: Mapped[int]
    file_upload_config_id: Mapped[int]
    file_key: Mapped[str]
    original_file_name: Mapped[str]
    file_size_bytes: Mapped[int]
    s3_bucket: Mapped[str]
    s3_key: Mapped[str]
    upload_status: Mapped[str]
    total_parts: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    file_type: Mapped[str | None]
    mime_type: Mapped[str | None]
    md5sum: Mapped[str | None]
    multipart_upload_id: Mapped[str | None]
    upload_metadata: Mapped[dict | None]
    error_message: Mapped[str | None]
    completed_at: Mapped[datetime.datetime | None]
    expires_at: Mapped[datetime.datetime | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    file_upload_config: Mapped['FileUploadConfig']
    statement_period_adjustment_file: Mapped[list['StatementPeriodAdjustmentFile']]
    worksheet_flowthrough_batch: Mapped[list['WorksheetFlowthroughBatch']]

class PaymentGroupPayment(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_group_payment_id: Mapped[int]
    payment_group_id: Mapped[int]
    statement_period_id: Mapped[int]
    payment_name: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    payment_group: Mapped['PaymentGroup']
    statement_period: Mapped['StatementPeriod']
    payment_group_payment_account: Mapped[list['PaymentGroupPaymentAccount']]
    payment_group_payment_batch: Mapped[list['PaymentGroupPaymentBatch']]
    report_payment_group_payment: Mapped[list['ReportPaymentGroupPayment']]

class PaymentHold(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_hold_id: Mapped[int]
    account_id: Mapped[int]
    is_on_hold: Mapped[int]
    start_date: Mapped[datetime.date]
    reason: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account: Mapped['Account']
    payment_hold_history: Mapped[list['PaymentHoldHistory']]

class ReferencePayoneerProgram(Base):
    __tablename__: str
    __table_args__: Incomplete
    payoneer_program_id: Mapped[int]
    payoneer_program_name: Mapped[str]
    funding_currency: Mapped[str]
    reference_payment_type_id: Mapped[int]
    reference_payment_type: Mapped['ReferencePaymentType']
    account_payee: Mapped[list['AccountPayee']]
    payee: Mapped[list['Payee']]
    payment_entity_payoneer_program: Mapped[list['PaymentEntityPayoneerProgram']]
    payment_group_payment_account: Mapped[list['PaymentGroupPaymentAccount']]
    payment_group_payment_batch: Mapped[list['PaymentGroupPaymentBatch']]

class ReferenceSigningEntity(Base, SoftDeleteMixin):
    __tablename__: str
    __table_args__: Incomplete
    reference_signing_entity_id: Mapped[int]
    reference_payment_entity_id: Mapped[int]
    company_code: Mapped[str]
    legal_name: Mapped[str]
    reference_sap_profit_center_id: Mapped[int]
    tax_entity_company_code: Mapped[str | None]
    vat_number: Mapped[str | None]
    company_registration_number: Mapped[str | None]
    address: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    reference_payment_entity: Mapped['ReferencePaymentEntity']
    reference_sap_profit_center: Mapped['ReferenceSapProfitCenter']
    contract: Mapped[list['Contract']]
    contract_history: Mapped[list['ContractHistory']]
    contract_template: Mapped[list['ContractTemplate']]
    signing_entity_sap_profit_center: Mapped[list['SigningEntitySapProfitCenter']]

class ReferenceTransactionTypeGroupTransactionType(Base):
    __tablename__: str
    __table_args__: Incomplete
    reference_transaction_type_group_transaction_type_id: Mapped[int]
    reference_transaction_type_group_id: Mapped[int]
    reference_transaction_type_id: Mapped[int]
    reference_transaction_type_group_admin: Mapped[str | None]
    reference_transaction_type_group: Mapped['ReferenceTransactionTypeGroup']
    reference_transaction_type: Mapped['ReferenceTransactionType']

class ReportCustom(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    report_custom_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_ids: Mapped[str]
    revenue_type: Mapped[str]
    revenue_display_type: Mapped[str]
    report_custom_status: Mapped[str]
    dimension_row: Mapped[str]
    dimension_column: Mapped[str]
    number_format: Mapped[str]
    file_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    subaccount_id: Mapped[int | None]
    filters: Mapped[dict | None]
    file_location: Mapped[str | None]
    account: Mapped['Account']

class ScheduleAttachment(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    schedule_attachment_id: Mapped[int]
    schedule_id: Mapped[int]
    target_type: Mapped[str]
    target_id: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    schedule: Mapped['Schedule']

class ScheduleHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    schedule_history_id: Mapped[int]
    schedule_id: Mapped[int]
    schedule_name: Mapped[str]
    target_id: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    target_type: Mapped[str | None]
    conditions: Mapped[dict | None]
    schedule: Mapped['Schedule']

class StatementAttachment(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    statement_attachment_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    statement_attachment_status: Mapped[str]
    statement_attachment_type: Mapped[str]
    file_type: Mapped[str]
    number_format: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    subaccount_id: Mapped[int | None]
    contract_id: Mapped[int | None]
    statement_period_ids: Mapped[str | None]
    failure_reason: Mapped[str | None]
    filters: Mapped[dict | None]
    invoice_number: Mapped[str | None]
    file_location: Mapped[str | None]
    account: Mapped['Account']
    statement_period: Mapped['StatementPeriod']

class StatementPeriodPaymentEntity(Base):
    __tablename__: str
    __table_args__: Incomplete
    statement_period_payment_entity_id: Mapped[int]
    statement_period_id: Mapped[int]
    is_visible_to_customer: Mapped[int]
    reference_payment_entity_id: Mapped[int | None]
    reference_payment_entity: Mapped[ReferencePaymentEntity | None]
    statement_period: Mapped['StatementPeriod']

class VatSummaryFile(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    vat_summary_file_id: Mapped[int]
    statement_period_id: Mapped[int]
    file_location: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    statement_period: Mapped['StatementPeriod']

class AccountPayee(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payee_id: Mapped[int]
    account_id: Mapped[int]
    payment_description: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payoneer_program_id: Mapped[int | None]
    payoneer_payee_id: Mapped[int | None]
    payoneer_payee_name: Mapped[str | None]
    payoneer_iframe_url: Mapped[str | None]
    payoneer_iframe_url_date: Mapped[datetime.date | None]
    payoneer_session_id: Mapped[str | None]
    sap_vendor_id: Mapped[int | None]
    reference_payment_type_id: Mapped[int | None]
    account: Mapped['Account']
    payoneer_program: Mapped[ReferencePayoneerProgram | None]
    reference_payment_type: Mapped[ReferencePaymentType | None]
    account_payee_history: Mapped[list['AccountPayeeHistory']]
    account_payee_kyc_notification: Mapped[list['AccountPayeeKycNotification']]
    account_payee_tax_form_info: Mapped[list['AccountPayeeTaxFormInfo']]
    tax_withholding_override: Mapped[list['TaxWithholdingOverride']]

class AccountPaymentTermHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payment_term_history_id: Mapped[int]
    account_payment_term_id: Mapped[int]
    account_id: Mapped[int]
    currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payment_minimum: Mapped[decimal.Decimal | None]
    payment_entity_id: Mapped[int | None]
    agreement_type_id: Mapped[int | None]
    payment_schedule: Mapped[str | None]
    account: Mapped['Account']
    account_payment_term: Mapped['AccountPaymentTerm']
    payment_entity: Mapped[ReferencePaymentEntity | None]

class AccountTaxInfoHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_tax_info_history_id: Mapped[int]
    account_tax_info_id: Mapped[int]
    account_id: Mapped[int]
    is_vat_exempt: Mapped[int]
    is_tax_treaty_claimed: Mapped[int]
    is_wht_applicable: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    country_of_tax_residence: Mapped[str | None]
    is_sba_signed: Mapped[int | None]
    tax_employment_type: Mapped[str | None]
    certificate_of_residence_expiration_date: Mapped[datetime.date | None]
    is_resident_of_spanish_islands: Mapped[int | None]
    wht_rate_override: Mapped[decimal.Decimal | None]
    account: Mapped['Account']
    account_tax_info: Mapped['AccountTaxInfo']
    reports_tax_info: Mapped[list['ReportsTaxInfo']]

class AccountingPeriodReport(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    accounting_period_report_id: Mapped[int]
    accounting_period_id: Mapped[int]
    report_type: Mapped[str]
    report_export_url: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    accounting_period: Mapped['AccountingPeriod']

class AccountingRun(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    accounting_run_id: Mapped[int]
    accounting_period_id: Mapped[int]
    run_controller_id: Mapped[int]
    run_status: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    start_date: Mapped[datetime.datetime | None]
    end_date: Mapped[datetime.datetime | None]
    summary_export_url: Mapped[str | None]
    accounting_period: Mapped['AccountingPeriod']
    run_controller: Mapped['RunController']
    ledger_accounting_run_balance: Mapped[list['LedgerAccountingRunBalance']]
    ledger_accounting_run_vat: Mapped[list['LedgerAccountingRunVat']]
    ledger_reserve_taken: Mapped[list['LedgerReserveTaken']]

class Contract(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_id: Mapped[int]
    reference_signing_entity_id: Mapped[int]
    reference_sap_profit_center_id: Mapped[int]
    contract_name: Mapped[str]
    contract_type: Mapped[str]
    is_primary_contract: Mapped[int]
    is_paythrough_contract: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    sap_created_at: Mapped[datetime.datetime | None]
    initial_start_date: Mapped[datetime.date | None]
    execution_date: Mapped[datetime.date | None]
    is_excluded_from_accounting_run: Mapped[int | None]
    summary_note: Mapped[str | None]
    general_note: Mapped[str | None]
    term_start: Mapped[datetime.date | None]
    term_end: Mapped[datetime.date | None]
    reference_sap_profit_center: Mapped['ReferenceSapProfitCenter']
    reference_signing_entity: Mapped['ReferenceSigningEntity']
    account_contract: Mapped[list['AccountContract']]
    account_contract_vat_detail: Mapped[list['AccountContractVatDetail']]
    contract_advance: Mapped[list['ContractAdvance']]
    contract_exclusion: Mapped[list['ContractExclusion']]
    contract_flowthrough: Mapped[list['ContractFlowthrough']]
    contract_lifecycle_schedule: Mapped[list['ContractLifecycleSchedule']]
    contract_mechanical_deduction: Mapped[list['ContractMechanicalDeduction']]
    contract_party: Mapped[list['ContractParty']]
    contract_reserve: Mapped[list['ContractReserve']]
    contract_term: Mapped[list['ContractTerm']]
    earnings_transfer: Mapped[list['EarningsTransfer']]
    earnings_transfer_: Mapped[list['EarningsTransfer']]
    ledger_account: Mapped[list['LedgerAccount']]
    ledger_account_contract: Mapped[list['LedgerAccountContract']]
    ledger_accounting_run_balance: Mapped[list['LedgerAccountingRunBalance']]
    ledger_accounting_run_vat: Mapped[list['LedgerAccountingRunVat']]
    ledger_adjustment: Mapped[list['LedgerAdjustment']]
    ledger_adjustment_detail: Mapped[list['LedgerAdjustmentDetail']]
    ledger_contract_flowthrough: Mapped[list['LedgerContractFlowthrough']]
    ledger_deposit: Mapped[list['LedgerDeposit']]
    ledger_vat_summary: Mapped[list['LedgerVatSummary']]
    legacy_contract: Mapped[list['LegacyContract']]
    payment_allocation: Mapped[list['PaymentAllocation']]
    project_transfer_term: Mapped[list['ProjectTransferTerm']]
    run_controller_contract: Mapped[list['RunControllerContract']]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    worksheet_correction: Mapped[list['WorksheetCorrection']]
    worksheet_flowthrough: Mapped[list['WorksheetFlowthrough']]
    worksheet_payment_custom: Mapped[list['WorksheetPaymentCustom']]
    worksheet_tax_correction: Mapped[list['WorksheetTaxCorrection']]
    worksheet_tax_correction_vat: Mapped[list['WorksheetTaxCorrectionVat']]
    contract_advance_history: Mapped[list['ContractAdvanceHistory']]
    contract_lifecycle: Mapped[list['ContractLifecycle']]
    contract_party_history: Mapped[list['ContractPartyHistory']]
    ledger_account_contract_current_balance: Mapped[
        list['LedgerAccountContractCurrentBalance']
    ]
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]
    ledger_contract_advance_applied: Mapped[list['LedgerContractAdvanceApplied']]
    ledger_contract_flowthrough_current_balance: Mapped[
        list['LedgerContractFlowthroughCurrentBalance']
    ]
    ledger_correction: Mapped[list['LedgerCorrection']]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]
    worksheet_account_contract_payable_after_tax: Mapped[
        list['WorksheetAccountContractPayableAfterTax']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]
    payment_group_payment_account_detail: Mapped[
        list['PaymentGroupPaymentAccountDetail']
    ]
    worksheet_account_contract_payable_details: Mapped[
        list['WorksheetAccountContractPayableDetails']
    ]

class ContractHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_history_id: Mapped[int]
    contract_id: Mapped[int]
    reference_signing_entity_id: Mapped[int]
    contract_name: Mapped[str]
    contract_type: Mapped[str]
    is_primary_contract: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    reference_sap_profit_center_id: Mapped[int | None]
    sap_created_at: Mapped[datetime.datetime | None]
    initial_start_date: Mapped[datetime.date | None]
    execution_date: Mapped[datetime.date | None]
    is_excluded_from_accounting_run: Mapped[int | None]
    summary_note: Mapped[str | None]
    general_note: Mapped[str | None]
    term_start: Mapped[datetime.date | None]
    term_end: Mapped[datetime.date | None]
    reference_sap_profit_center: Mapped[ReferenceSapProfitCenter | None]
    reference_signing_entity: Mapped['ReferenceSigningEntity']

class ContractTemplate(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_template_id: Mapped[int]
    template_name: Mapped[str]
    reference_signing_entity_id: Mapped[int]
    contract_type: Mapped[str]
    contract_terms: Mapped[dict]
    contract_exclusions: Mapped[dict]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    run_controller_id: Mapped[int | None]
    term_duration_year: Mapped[int | None]
    reference_signing_entity: Mapped['ReferenceSigningEntity']
    run_controller: Mapped[RunController | None]

class Payee(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payee_id: Mapped[int]
    reference_payment_type_id: Mapped[int]
    payoneer_client_reference_id: Mapped[str]
    payoneer_program_id: Mapped[int]
    payee_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payoneer_assigned_id: Mapped[int | None]
    payee_name: Mapped[str | None]
    payoneer_program: Mapped['ReferencePayoneerProgram']
    reference_payment_type: Mapped['ReferencePaymentType']
    payee_collaborator: Mapped[list['PayeeCollaborator']]
    payee_kyc_notification: Mapped[list['PayeeKycNotification']]

class PaymentEntityPayoneerProgram(Base):
    __tablename__: str
    __table_args__: Incomplete
    payment_entity_payoneer_program_id: Mapped[int]
    payoneer_program_id: Mapped[int]
    payment_currency: Mapped[str]
    agreement_type_id: Mapped[int]
    reference_payment_entity_id: Mapped[int | None]
    agreement_type: Mapped['ReferenceAgreementType']
    payoneer_program: Mapped['ReferencePayoneerProgram']
    reference_payment_entity: Mapped[ReferencePaymentEntity | None]

class PaymentGroupPaymentAccount(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_group_payment_account_id: Mapped[int]
    payment_group_payment_id: Mapped[int]
    account_id: Mapped[int]
    payoneer_program_id: Mapped[int]
    current_statement_period_id: Mapped[int]
    currency_code: Mapped[str]
    last_payment: Mapped[decimal.Decimal]
    current_balance: Mapped[decimal.Decimal]
    balance_after_tax: Mapped[decimal.Decimal]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    prior_payment_group_payment_id: Mapped[int | None]
    last_statement_period_id: Mapped[int | None]
    contracts_payable: Mapped[dict | None]
    tax_withholding: Mapped[decimal.Decimal | None]
    vat_amount: Mapped[decimal.Decimal | None]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    current_statement_period: Mapped['StatementPeriod']
    last_statement_period: Mapped[StatementPeriod | None]
    payment_group_payment: Mapped['PaymentGroupPayment']
    payoneer_program: Mapped['ReferencePayoneerProgram']
    payment_group_payment_batch_account: Mapped[list['PaymentGroupPaymentBatchAccount']]
    payment_group_payment_account_detail: Mapped[
        list['PaymentGroupPaymentAccountDetail']
    ]

class PaymentGroupPaymentBatch(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_group_payment_batch_id: Mapped[int]
    payment_group_payment_id: Mapped[int]
    payoneer_program_id: Mapped[int]
    batch_num: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payment_group_payment: Mapped['PaymentGroupPayment']
    payoneer_program: Mapped['ReferencePayoneerProgram']
    payment_group_payment_batch_account: Mapped[list['PaymentGroupPaymentBatchAccount']]

class PaymentHoldHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_hold_history_id: Mapped[int]
    payment_hold_id: Mapped[int]
    account_id: Mapped[int]
    is_on_hold: Mapped[int]
    start_date: Mapped[datetime.date]
    reason: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    end_date: Mapped[datetime.date | None]
    account: Mapped['Account']
    payment_hold: Mapped['PaymentHold']

class ReportPaymentGroupPayment(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    report_payment_group_payment_id: Mapped[int]
    payment_group_payment_id: Mapped[int]
    report_type: Mapped[str]
    report_export_url: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payment_group_payment: Mapped['PaymentGroupPayment']

class SalesFile(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    sales_file_id: Mapped[int]
    file_name: Mapped[str]
    accounting_period_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    row_count: Mapped[int | None]
    main_url: Mapped[str | None]
    amount_usd: Mapped[decimal.Decimal | None]
    accounting_period: Mapped['AccountingPeriod']

class SigningEntitySapProfitCenter(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    signing_entity_sap_profit_center_id: Mapped[int]
    reference_signing_entity_id: Mapped[int]
    reference_sap_profit_center_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    reference_sap_profit_center: Mapped['ReferenceSapProfitCenter']
    reference_signing_entity: Mapped['ReferenceSigningEntity']

class StatementPeriodAdjustmentFile(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    statement_period_adjustment_file_id: Mapped[int]
    statement_period_id: Mapped[int]
    file_name: Mapped[str]
    batch_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    valid_file_location: Mapped[str | None]
    invalid_file_location: Mapped[str | None]
    valid_row_count: Mapped[int | None]
    invalid_row_count: Mapped[int | None]
    total_file_amount_multicurrency: Mapped[decimal.Decimal | None]
    total_rounded_amount_multicurrency: Mapped[decimal.Decimal | None]
    md5sum: Mapped[str | None]
    error_type: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    source_file_upload_id: Mapped[int | None]
    source_file_upload: Mapped[FileUpload | None]
    statement_period: Mapped['StatementPeriod']
    statement_period_adjustment_batch_criteria: Mapped[
        list['StatementPeriodAdjustmentBatchCriteria']
    ]
    worksheet_adjustment: Mapped[list['WorksheetAdjustment']]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]

class WorksheetFlowthroughBatch(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_flowthrough_batch_id: Mapped[int]
    statement_period_id: Mapped[int]
    batch_type: Mapped[str]
    batch_status: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    source_file_upload_id: Mapped[int | None]
    errors: Mapped[dict | None]
    error_row_count: Mapped[int | None]
    row_level_error_count: Mapped[int | None]
    total_row_count: Mapped[int | None]
    total_amount: Mapped[decimal.Decimal | None]
    total_amount_raw: Mapped[decimal.Decimal | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    source_file_upload: Mapped[FileUpload | None]
    statement_period: Mapped['StatementPeriod']
    worksheet_flowthrough: Mapped[list['WorksheetFlowthrough']]
    worksheet_flowthrough_file: Mapped[list['WorksheetFlowthroughFile']]

class AccountContract(Base):
    __tablename__: str
    __table_args__: Incomplete
    account_contract_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    is_primary_for_calc: Mapped[int | None]
    account: Mapped['Account']
    contract: Mapped['Contract']

class AccountContractVatDetail(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_contract_vat_detail_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    is_vat_eligible: Mapped[int]
    is_vat_registered: Mapped[int]
    created_by: Mapped[str]
    last_modified_by: Mapped[str]
    company_code: Mapped[str | None]
    vat_country: Mapped[str | None]
    created_at: Mapped[datetime.datetime | None]
    last_modified: Mapped[datetime.datetime | None]
    account: Mapped['Account']
    contract: Mapped['Contract']

class AccountPayeeHistory(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payee_history_id: Mapped[int]
    account_payee_id: Mapped[int]
    account_id: Mapped[int]
    payment_description: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payoneer_program_id: Mapped[int | None]
    payoneer_payee_id: Mapped[int | None]
    payoneer_payee_name: Mapped[str | None]
    payoneer_iframe_url: Mapped[str | None]
    payoneer_iframe_url_date: Mapped[datetime.date | None]
    payoneer_session_id: Mapped[str | None]
    sap_vendor_id: Mapped[int | None]
    reference_payment_type_id: Mapped[int | None]
    account: Mapped['Account']
    account_payee: Mapped['AccountPayee']

class AccountPayeeKycNotification(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payee_kyc_notification_id: Mapped[int]
    account_payee_id: Mapped[int]
    file_upload_link: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    requirement_id: Mapped[str | None]
    requirement_type_id: Mapped[int | None]
    sub_requirement_id: Mapped[str | None]
    possible_sub_requirement_types: Mapped[str | None]
    sub_requirement_status_id: Mapped[int | None]
    entity_reference_id: Mapped[str | None]
    entity_reference_type_id: Mapped[int | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account_payee: Mapped['AccountPayee']

class AccountPayeeTaxFormInfo(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    account_payee_tax_form_info_id: Mapped[int]
    tax_form_type: Mapped[str]
    account_payee_id: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    revision_id: Mapped[str | None]
    signed_date: Mapped[datetime.date | None]
    expiration_date: Mapped[datetime.date | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account_payee: Mapped['AccountPayee']

class ContractAdvance(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_advance_id: Mapped[int]
    contract_id: Mapped[int]
    advance_description: Mapped[str]
    amount: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    milestone: Mapped[str]
    milestone_description: Mapped[str]
    advance_status: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    reference_payment_type_id: Mapped[int | None]
    reference_advance_payment_method_id: Mapped[int | None]
    vat_amount: Mapped[decimal.Decimal | None]
    withholding_tax_amount: Mapped[decimal.Decimal | None]
    amount_after_withholding_and_vat: Mapped[decimal.Decimal | None]
    us_source_income_rate: Mapped[decimal.Decimal | None]
    milestone_date: Mapped[datetime.date | None]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract: Mapped['Contract']
    reference_advance_payment_method: Mapped[ReferenceAdvancePaymentMethod | None]
    reference_payment_type: Mapped[ReferencePaymentType | None]
    contract_advance_history: Mapped[list['ContractAdvanceHistory']]
    ledger_contract_advance_applied: Mapped[list['LedgerContractAdvanceApplied']]
    worksheet_payment_contract_advance: Mapped[list['WorksheetPaymentContractAdvance']]

class ContractExclusion(Base):
    __tablename__: str
    __table_args__: Incomplete
    contract_exclusion_id: Mapped[int]
    contract_id: Mapped[int]
    exclusions: Mapped[dict]
    contract: Mapped['Contract']

class ContractFlowthrough(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_flowthrough_id: Mapped[int]
    contract_id: Mapped[int]
    reference_flowthrough_calculation_id: Mapped[int]
    flowthrough_rate: Mapped[decimal.Decimal]
    flowthrough_status: Mapped[str]
    has_automatic_shutoff: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    recoupment_cap: Mapped[int | None]
    calculation_comment: Mapped[str | None]
    previous_flowthrough_status: Mapped[str | None]
    status_last_modified_by: Mapped[str | None]
    status_last_modified: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']
    reference_flowthrough_calculation: Mapped['ReferenceFlowthroughCalculation']

class ContractLifecycleSchedule(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_lifecycle_schedule_id: Mapped[int]
    contract_id: Mapped[int]
    renewal_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    termination_notice_detail_id: Mapped[int | None]
    renewal_offset_detail_id: Mapped[int | None]
    collection_period_detail_id: Mapped[int | None]
    schedule_end: Mapped[datetime.date | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    collection_period_detail: Mapped[ContractLifecycleScheduleDetail | None]
    contract: Mapped['Contract']
    renewal_offset_detail: Mapped[ContractLifecycleScheduleDetail | None]
    termination_notice_detail: Mapped[ContractLifecycleScheduleDetail | None]
    contract_lifecycle: Mapped[list['ContractLifecycle']]

class ContractMechanicalDeduction(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_mechanical_deduction_id: Mapped[int]
    contract_id: Mapped[int]
    territory: Mapped[str]
    mechanical_type: Mapped[str]
    admin_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    admin_fee: Mapped[decimal.Decimal | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']

class ContractParty(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_party_id: Mapped[int]
    contract_id: Mapped[int]
    target_type: Mapped[str]
    target_id: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract: Mapped['Contract']
    contract_party_history: Mapped[list['ContractPartyHistory']]

class ContractReserve(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_reserve_id: Mapped[int]
    contract_id: Mapped[int]
    reserve_rate: Mapped[decimal.Decimal]
    reserve_release_offset_in_months: Mapped[int]
    installments_in_months: Mapped[int]
    release_schedule: Mapped[dict]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    conditions: Mapped[dict | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']
    ledger_reserve_taken: Mapped[list['LedgerReserveTaken']]

class ContractTerm(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_term_id: Mapped[int]
    contract_id: Mapped[int]
    term_type: Mapped[str]
    is_base_term: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_term_name: Mapped[str | None]
    attachments: Mapped[dict | None]
    attachments_relations: Mapped[dict | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']
    contract_term_condition: Mapped[list['ContractTermCondition']]
    contract_term_schedule: Mapped[list['ContractTermSchedule']]
    contract_term_schedule_history: Mapped[list['ContractTermScheduleHistory']]

class EarningsTransfer(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    earnings_transfer_id: Mapped[int]
    from_contract_id: Mapped[int]
    to_contract_id: Mapped[int]
    transfer_type: Mapped[str]
    transfer_amount: Mapped[decimal.Decimal]
    negative: Mapped[int]
    active: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    rate_type: Mapped[str | None]
    input: Mapped[str | None]
    comment: Mapped[str | None]
    from_contract: Mapped['Contract']
    to_contract: Mapped['Contract']

class LedgerAccount(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_account_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    currency_code: Mapped[str]
    currency_amount: Mapped[decimal.Decimal]
    previous_balance: Mapped[decimal.Decimal]
    current_balance: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    note: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped[Contract | None]
    ledger_account_current_balance: Mapped[list['LedgerAccountCurrentBalance']]

class LedgerAccountContract(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_account_contract_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    currency_code: Mapped[str]
    currency_amount: Mapped[decimal.Decimal]
    previous_balance: Mapped[decimal.Decimal]
    current_balance: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    note: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped['Contract']
    ledger_account_contract_current_balance: Mapped[
        list['LedgerAccountContractCurrentBalance']
    ]
    worksheet_account_contract_closing_balance: Mapped[
        list['WorksheetAccountContractClosingBalance']
    ]

class LedgerAccountingRunBalance(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_accounting_run_balance_id: Mapped[int]
    accounting_run_id: Mapped[int]
    abacus_event_id: Mapped[int]
    contract_id: Mapped[int]
    currency_code: Mapped[str]
    adjusted_net_revenue: Mapped[decimal.Decimal]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    total_gross_revenue_amount: Mapped[decimal.Decimal | None]
    total_net_revenue_amount: Mapped[decimal.Decimal | None]
    mechanical_deduction_total: Mapped[decimal.Decimal | None]
    mechanical_deduction_admin_fee_total: Mapped[decimal.Decimal | None]
    distribution_fee: Mapped[decimal.Decimal | None]
    abacus_event: Mapped['AbacusEvent']
    accounting_run: Mapped['AccountingRun']
    contract: Mapped['Contract']

class LedgerAccountingRunVat(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_accounting_run_vat_id: Mapped[int]
    accounting_run_id: Mapped[int]
    abacus_event_id: Mapped[int]
    contract_id: Mapped[int]
    currency_code: Mapped[str]
    country_of_tax_residence: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    gross_revenue: Mapped[decimal.Decimal | None]
    net_revenue: Mapped[decimal.Decimal | None]
    distribution_fee: Mapped[decimal.Decimal | None]
    gross_vat_rate: Mapped[decimal.Decimal | None]
    distribution_vat_rate: Mapped[decimal.Decimal | None]
    gross_vat: Mapped[decimal.Decimal | None]
    distribution_vat: Mapped[decimal.Decimal | None]
    adjusted_net_revenue: Mapped[decimal.Decimal | None]
    exempt_reason: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    accounting_run: Mapped['AccountingRun']
    contract: Mapped['Contract']

class LedgerAdjustment(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    activity_statement_period_id: Mapped[int]
    apply_to_statement_period_id: Mapped[int]
    reference_adjustment_type_id: Mapped[int]
    adjustment_amount: Mapped[decimal.Decimal]
    adjustment_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    note: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    apply_to_statement_period: Mapped['StatementPeriod']
    contract: Mapped[Contract | None]
    reference_adjustment_type: Mapped['ReferenceAdjustmentType']
    ledger_adjustment_adjustment_detail: Mapped[
        list['LedgerAdjustmentAdjustmentDetail']
    ]
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]

class LedgerAdjustmentDetail(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_detail_id: Mapped[int]
    account_id: Mapped[int]
    activity_statement_period_id: Mapped[int]
    apply_to_statement_period_id: Mapped[int]
    reference_adjustment_type_id: Mapped[int]
    currency_code: Mapped[str]
    amount: Mapped[decimal.Decimal]
    upc: Mapped[str]
    distribution_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    note: Mapped[str | None]
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    apply_to_statement_period: Mapped['StatementPeriod']
    contract: Mapped[Contract | None]
    reference_adjustment_type: Mapped['ReferenceAdjustmentType']
    ledger_adjustment_adjustment_detail: Mapped[
        list['LedgerAdjustmentAdjustmentDetail']
    ]
    ledger_adjustment_detail_applied: Mapped[list['LedgerAdjustmentDetailApplied']]

class LedgerContractFlowthrough(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_contract_flowthrough_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    currency_code: Mapped[str]
    currency_amount: Mapped[decimal.Decimal]
    previous_balance: Mapped[decimal.Decimal]
    current_balance: Mapped[decimal.Decimal]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    note: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped['Contract']
    ledger_contract_flowthrough_current_balance: Mapped[
        list['LedgerContractFlowthroughCurrentBalance']
    ]

class LedgerDeposit(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_deposit_id: Mapped[int]
    account_id: Mapped[int]
    abacus_event_id: Mapped[int]
    currency_code: Mapped[str]
    rounded_amount: Mapped[decimal.Decimal]
    remaining_amount: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped[Contract | None]

class LedgerVatSummary(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_vat_summary_id: Mapped[int]
    statement_period_id: Mapped[int]
    activity_statement_period_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    vat_category: Mapped[str]
    payee_currency_code: Mapped[str]
    vat_currency_code: Mapped[str]
    base_amount_payee_currency: Mapped[decimal.Decimal]
    net_amount_payee_currency: Mapped[decimal.Decimal]
    is_reporting_only: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    vat_rate: Mapped[decimal.Decimal | None]
    vat_amount_payee_currency: Mapped[decimal.Decimal | None]
    vat_amount_vat_currency: Mapped[decimal.Decimal | None]
    wht_rate: Mapped[decimal.Decimal | None]
    wht_amount_vat_currency: Mapped[decimal.Decimal | None]
    wht_amount_payee_currency: Mapped[decimal.Decimal | None]
    abacus_exempt_reason: Mapped[str | None]
    description: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    contract: Mapped['Contract']
    statement_period: Mapped['StatementPeriod']

class LegacyContract(Base):
    __tablename__: str
    __table_args__: Incomplete
    legacy_contract_id: Mapped[int]
    contract_id: Mapped[int]
    oa_contract_id: Mapped[int | None]
    contract: Mapped['Contract']

class PayeeCollaborator(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payee_collaborator_id: Mapped[int]
    collaborator_id: Mapped[int]
    payee_id: Mapped[int]
    account_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account: Mapped['Account']
    payee: Mapped['Payee']

class PayeeKycNotification(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payee_kyc_notification_id: Mapped[int]
    payee_id: Mapped[int]
    file_upload_link: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    requirement_id: Mapped[str | None]
    requirement_type_id: Mapped[int | None]
    sub_requirement_id: Mapped[str | None]
    possible_sub_requirement_types: Mapped[str | None]
    sub_requirement_status_id: Mapped[int | None]
    entity_reference_id: Mapped[str | None]
    entity_reference_type_id: Mapped[int | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    payee: Mapped['Payee']

class PaymentAllocation(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_allocation_id: Mapped[int]
    contract_id: Mapped[int]
    payee_type: Mapped[str]
    payee_id: Mapped[int]
    statement_period_id: Mapped[int]
    payment_allocation_type: Mapped[str]
    amount_to_payment: Mapped[decimal.Decimal]
    payment_status: Mapped[str]
    amount_to_ledger: Mapped[decimal.Decimal]
    ledger_status: Mapped[str]
    currency_code: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    payment_status_modified: Mapped[datetime.datetime | None]
    ledger_status_modified: Mapped[datetime.datetime | None]
    description: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract: Mapped['Contract']
    statement_period: Mapped['StatementPeriod']
    payment_allocation_ledger_adjustment: Mapped[
        list['PaymentAllocationLedgerAdjustment']
    ]

class PaymentGroupPaymentBatchAccount(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_group_payment_batch_account_id: Mapped[int]
    payment_group_payment_account_id: Mapped[int]
    payment_group_payment_batch_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    payment_group_payment_account: Mapped['PaymentGroupPaymentAccount']
    payment_group_payment_batch: Mapped['PaymentGroupPaymentBatch']

class ProjectTransferTerm(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    project_transfer_term_id: Mapped[int]
    job_id: Mapped[int]
    contract_id: Mapped[int]
    term_type: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    name: Mapped[str | None]
    attachments: Mapped[dict | None]
    attachment_relations: Mapped[dict | None]
    contract: Mapped['Contract']
    project_transfer_term_condition: Mapped[list['ProjectTransferTermCondition']]

class ReportsTaxInfo(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    reports_tax_info_id: Mapped[int]
    account_tax_info_history_id: Mapped[int]
    tax_type: Mapped[str]
    revision_id: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    account_tax_info_history: Mapped['AccountTaxInfoHistory']

class RunControllerContract(Base, AuditMixin, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    run_controller_contract_id: Mapped[int]
    run_controller_id: Mapped[int]
    contract_id: Mapped[int]
    audit_id: Mapped[str | None]
    created_by: Mapped[str | None]
    created_at: Mapped[datetime.datetime | None]
    last_modified_by: Mapped[str | None]
    last_modified: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']
    run_controller: Mapped['RunController']

class StatementPeriodAdjustmentBatchCriteria(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    statement_period_adjustment_batch_criteria_id: Mapped[int]
    batch_criteria: Mapped[dict]
    statement_period_adjustment_file_id: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    statement_period_adjustment_file: Mapped['StatementPeriodAdjustmentFile']

class TaxWithholdingOverride(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    tax_withholding_override_id: Mapped[int]
    account_payee_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    rate_override: Mapped[decimal.Decimal | None]
    certificate_expiration_date: Mapped[datetime.date | None]
    message: Mapped[str | None]
    account_payee: Mapped['AccountPayee']

class WorksheetAdjustment(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_adjustment_id: Mapped[int]
    statement_period_adjustment_file_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    activity_statement_period_id: Mapped[int]
    apply_to_statement_period_id: Mapped[int]
    reference_adjustment_type_id: Mapped[int]
    adjustment_amount: Mapped[decimal.Decimal]
    adjustment_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    note: Mapped[str | None]
    internal_note: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    apply_to_statement_period: Mapped['StatementPeriod']
    contract: Mapped[Contract | None]
    reference_adjustment_type: Mapped['ReferenceAdjustmentType']
    statement_period_adjustment_file: Mapped['StatementPeriodAdjustmentFile']
    ledger_adjustment_applied: Mapped[list['LedgerAdjustmentApplied']]
    worksheet_adjustment_detail: Mapped[list['WorksheetAdjustmentDetail']]
    ledger_adjustment_detail_applied: Mapped[list['LedgerAdjustmentDetailApplied']]

class WorksheetCorrection(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_correction_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    correction_statement_period_id: Mapped[int]
    correction_type: Mapped[str]
    currency_code: Mapped[str]
    gross_revenue: Mapped[decimal.Decimal]
    distribution_fee: Mapped[decimal.Decimal]
    net_revenue: Mapped[decimal.Decimal]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    contract_id: Mapped[int | None]
    mechanical_deduction_total: Mapped[decimal.Decimal | None]
    mechanical_deduction_admin_fee_total: Mapped[decimal.Decimal | None]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    contract: Mapped[Contract | None]
    correction_statement_period: Mapped['StatementPeriod']
    statement_period: Mapped['StatementPeriod']
    ledger_correction: Mapped[list['LedgerCorrection']]

class WorksheetFlowthrough(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_flowthrough_id: Mapped[int]
    worksheet_flowthrough_batch_id: Mapped[int]
    batch_row_index: Mapped[int]
    source_data: Mapped[dict]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    account_id: Mapped[int | None]
    contract_id: Mapped[int | None]
    amount: Mapped[decimal.Decimal | None]
    amount_raw: Mapped[decimal.Decimal | None]
    activity_month: Mapped[int | None]
    activity_year: Mapped[int | None]
    activity_statement_period_id: Mapped[int | None]
    note: Mapped[str | None]
    internal_note: Mapped[str | None]
    errors: Mapped[dict | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped[Account | None]
    activity_statement_period: Mapped[StatementPeriod | None]
    contract: Mapped[Contract | None]
    worksheet_flowthrough_batch: Mapped['WorksheetFlowthroughBatch']

class WorksheetFlowthroughFile(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_flowthrough_file_id: Mapped[int]
    worksheet_flowthrough_batch_id: Mapped[int]
    file_key: Mapped[str]
    file_name: Mapped[str]
    file_size_bytes: Mapped[int]
    s3_key: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    file_type: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    worksheet_flowthrough_batch: Mapped['WorksheetFlowthroughBatch']

class WorksheetPaymentCustom(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_payment_custom_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    currency_code: Mapped[str]
    amount: Mapped[decimal.Decimal]
    withholding_tax_amount: Mapped[decimal.Decimal]
    withholding_tax_rate: Mapped[decimal.Decimal]
    vat_amount: Mapped[decimal.Decimal]
    vat_rate: Mapped[decimal.Decimal]
    amount_after_withholding_and_vat: Mapped[decimal.Decimal]
    activity_statement_period_id: Mapped[int]
    statement_period_id: Mapped[int]
    payment_name: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    contract: Mapped['Contract']
    statement_period: Mapped['StatementPeriod']

class WorksheetTaxCorrection(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_tax_correction_id: Mapped[int]
    contract_id: Mapped[int]
    account_id: Mapped[int]
    correction_statement_period_id: Mapped[int]
    payable_detail_type_id: Mapped[int]
    amount: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    contract: Mapped['Contract']
    correction_statement_period: Mapped['StatementPeriod']
    payable_detail_type: Mapped['ReferencePayableDetailType']

class WorksheetTaxCorrectionVat(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_tax_correction_vat_id: Mapped[int]
    payable_detail_type_id: Mapped[int]
    contract_id: Mapped[int]
    account_id: Mapped[int]
    correction_statement_period_id: Mapped[int]
    base_amount_payee_currency: Mapped[decimal.Decimal]
    payee_currency_code: Mapped[str]
    vat_currency_code: Mapped[str]
    vat_rate: Mapped[decimal.Decimal]
    vat_amount_payee_currency: Mapped[decimal.Decimal]
    vat_amount_vat_currency: Mapped[decimal.Decimal]
    net_amount_payee_currency: Mapped[decimal.Decimal]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    vat_category: Mapped[str | None]
    wht_rate: Mapped[decimal.Decimal | None]
    wht_amount_payee_currency: Mapped[decimal.Decimal | None]
    wht_amount_vat_currency: Mapped[decimal.Decimal | None]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    contract: Mapped['Contract']
    correction_statement_period: Mapped['StatementPeriod']
    payable_detail_type: Mapped['ReferencePayableDetailType']

class ContractAdvanceHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_advance_history_id: Mapped[int]
    contract_advance_id: Mapped[int]
    contract_id: Mapped[int]
    advance_description: Mapped[str]
    amount: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    milestone: Mapped[str]
    milestone_description: Mapped[str]
    advance_status: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    reference_payment_type_id: Mapped[int | None]
    reference_advance_payment_method_id: Mapped[int | None]
    vat_amount: Mapped[decimal.Decimal | None]
    withholding_tax_amount: Mapped[decimal.Decimal | None]
    amount_after_withholding_and_vat: Mapped[decimal.Decimal | None]
    us_source_income_rate: Mapped[decimal.Decimal | None]
    milestone_date: Mapped[datetime.date | None]
    note: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract_advance: Mapped['ContractAdvance']
    contract: Mapped['Contract']
    reference_advance_payment_method: Mapped[ReferenceAdvancePaymentMethod | None]
    reference_payment_type: Mapped[ReferencePaymentType | None]

class ContractLifecycle(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_lifecycle_id: Mapped[int]
    contract_id: Mapped[int]
    contract_lifecycle_schedule_id: Mapped[int]
    lifecycle_status: Mapped[str]
    lifecycle_term_start: Mapped[datetime.date]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    lifecycle_term_end: Mapped[datetime.date | None]
    renewal_effective: Mapped[datetime.date | None]
    termination_notice_deadline: Mapped[datetime.date | None]
    termination_notice_received: Mapped[datetime.date | None]
    termination_effective: Mapped[datetime.date | None]
    collection_start: Mapped[datetime.date | None]
    collection_end: Mapped[datetime.date | None]
    last_renewed: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract: Mapped['Contract']
    contract_lifecycle_schedule: Mapped['ContractLifecycleSchedule']

class ContractPartyHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_party_history_id: Mapped[int]
    contract_party_id: Mapped[int]
    contract_id: Mapped[int]
    target_type: Mapped[str]
    target_id: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract: Mapped['Contract']
    contract_party: Mapped['ContractParty']

class ContractTermCondition(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_term_condition_id: Mapped[int]
    contract_term_id: Mapped[int]
    conditions: Mapped[dict]
    term_rate: Mapped[decimal.Decimal]
    commission: Mapped[decimal.Decimal]
    priority: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_term_condition_name: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract_term: Mapped['ContractTerm']

class ContractTermSchedule(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_term_schedule_id: Mapped[int]
    contract_term_id: Mapped[int]
    schedule_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract_term: Mapped['ContractTerm']
    schedule: Mapped['Schedule']
    contract_term_schedule_history: Mapped[list['ContractTermScheduleHistory']]

class LedgerAccountContractCurrentBalance(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_account_contract_current_balance_id: Mapped[int]
    ledger_account_contract_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account: Mapped['Account']
    contract: Mapped['Contract']
    ledger_account_contract: Mapped['LedgerAccountContract']

class LedgerAccountCurrentBalance(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_account_current_balance_id: Mapped[int]
    ledger_account_id: Mapped[int]
    account_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account: Mapped['Account']
    ledger_account: Mapped['LedgerAccount']

class LedgerAdjustmentAdjustmentDetail(Base):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_adjustment_detail_id: Mapped[int]
    ledger_adjustment_id: Mapped[int]
    ledger_adjustment_detail_id: Mapped[int]
    detail_count: Mapped[int]
    ledger_adjustment_detail: Mapped['LedgerAdjustmentDetail']
    ledger_adjustment: Mapped['LedgerAdjustment']

class LedgerAdjustmentApplied(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_applied_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    adjustment_amount: Mapped[decimal.Decimal]
    adjustment_currency_code: Mapped[str]
    adjustment_amount_payee_currency: Mapped[decimal.Decimal]
    adjustment_payee_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    ledger_adjustment_id: Mapped[int | None]
    worksheet_adjustment_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped[Contract | None]
    ledger_adjustment: Mapped[LedgerAdjustment | None]
    statement_period: Mapped['StatementPeriod']
    worksheet_adjustment: Mapped[WorksheetAdjustment | None]
    payment_allocation_ledger_adjustment: Mapped[
        list['PaymentAllocationLedgerAdjustment']
    ]
    ledger_adjustment_adjustment_detail_applied: Mapped[
        list['LedgerAdjustmentAdjustmentDetailApplied']
    ]

class LedgerContractAdvanceApplied(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_contract_advance_applied_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    contract_advance_id: Mapped[int]
    statement_period_id: Mapped[int]
    advance_amount: Mapped[decimal.Decimal]
    advance_currency_code: Mapped[str]
    advance_amount_payee_currency: Mapped[decimal.Decimal]
    advance_payee_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    worksheet_payment_contract_advance_id: Mapped[int | None]
    vat_amount: Mapped[decimal.Decimal | None]
    withholding_tax_amount: Mapped[decimal.Decimal | None]
    amount_after_withholding_and_vat: Mapped[decimal.Decimal | None]
    vat_amount_payee_currency: Mapped[decimal.Decimal | None]
    withholding_tax_amount_payee_currency: Mapped[decimal.Decimal | None]
    amount_after_withholding_and_vat_payee_currency: Mapped[decimal.Decimal | None]
    us_source_income_rate: Mapped[decimal.Decimal | None]
    exchange_rate: Mapped[decimal.Decimal | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract_advance: Mapped['ContractAdvance']
    contract: Mapped['Contract']
    statement_period: Mapped['StatementPeriod']

class LedgerContractFlowthroughCurrentBalance(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_contract_flowthrough_current_balance_id: Mapped[int]
    ledger_contract_flowthrough_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    account: Mapped['Account']
    contract: Mapped['Contract']
    ledger_contract_flowthrough: Mapped['LedgerContractFlowthrough']

class LedgerCorrection(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_correction_id: Mapped[int]
    abacus_event_id: Mapped[int]
    worksheet_correction_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    correction_statement_period_id: Mapped[int]
    correction_type: Mapped[str]
    currency_code: Mapped[str]
    gross_revenue: Mapped[decimal.Decimal]
    distribution_fee: Mapped[decimal.Decimal]
    net_revenue: Mapped[decimal.Decimal]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    contract_id: Mapped[int | None]
    mechanical_deduction_total: Mapped[decimal.Decimal | None]
    mechanical_deduction_admin_fee_total: Mapped[decimal.Decimal | None]
    note: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped[Contract | None]
    correction_statement_period: Mapped['StatementPeriod']
    statement_period: Mapped['StatementPeriod']
    worksheet_correction: Mapped['WorksheetCorrection']

class LedgerReserveTaken(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_reserve_taken_id: Mapped[int]
    abacus_event_id: Mapped[int]
    contract_reserve_id: Mapped[int]
    accounting_run_id: Mapped[int]
    statement_period_id: Mapped[int]
    currency_code: Mapped[str]
    gross_sales: Mapped[decimal.Decimal]
    gross_returns: Mapped[decimal.Decimal]
    net_revenue: Mapped[decimal.Decimal]
    reserve_amount: Mapped[decimal.Decimal]
    net_revenue_after_reserve: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    abacus_event: Mapped['AbacusEvent']
    accounting_run: Mapped['AccountingRun']
    contract_reserve: Mapped['ContractReserve']
    statement_period: Mapped['StatementPeriod']
    ledger_reserve_release_schedule: Mapped[list['LedgerReserveReleaseSchedule']]

class ProjectTransferTermCondition(Base, CreateMixin):
    __tablename__: str
    __table_args__: Incomplete
    project_transfer_term_condition_id: Mapped[int]
    project_transfer_term_id: Mapped[int]
    conditions: Mapped[dict]
    term_rate: Mapped[decimal.Decimal]
    commission: Mapped[decimal.Decimal]
    priority: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    name: Mapped[str | None]
    project_transfer_term: Mapped['ProjectTransferTerm']

class WorksheetAccountContractClosingBalance(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_account_contract_closing_balance_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    reference_payment_entity_id: Mapped[int]
    abacus_event_id: Mapped[int]
    currency_code: Mapped[str]
    statement_period_id: Mapped[int]
    amount: Mapped[decimal.Decimal]
    includes_tax_adjustments: Mapped[int]
    ledger_account_contract_id: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped['Contract']
    ledger_account_contract: Mapped['LedgerAccountContract']
    reference_payment_entity: Mapped['ReferencePaymentEntity']
    statement_period: Mapped['StatementPeriod']
    worksheet_account_contract_payable_after_tax: Mapped[
        list['WorksheetAccountContractPayableAfterTax']
    ]
    worksheet_account_contract_taxable_revenue: Mapped[
        list['WorksheetAccountContractTaxableRevenue']
    ]

class WorksheetAdjustmentDetail(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_adjustment_detail_id: Mapped[int]
    statement_period_adjustment_file_id: Mapped[int]
    worksheet_adjustment_id: Mapped[int]
    account_id: Mapped[int]
    activity_statement_period_id: Mapped[int]
    apply_to_statement_period_id: Mapped[int]
    reference_adjustment_type_id: Mapped[int]
    currency_code: Mapped[str]
    amount: Mapped[decimal.Decimal]
    upc: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    contract_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    distribution_type: Mapped[str | None]
    note: Mapped[str | None]
    internal_note: Mapped[str | None]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    account: Mapped['Account']
    activity_statement_period: Mapped['StatementPeriod']
    apply_to_statement_period: Mapped['StatementPeriod']
    contract: Mapped[Contract | None]
    reference_adjustment_type: Mapped['ReferenceAdjustmentType']
    statement_period_adjustment_file: Mapped['StatementPeriodAdjustmentFile']
    worksheet_adjustment: Mapped['WorksheetAdjustment']
    ledger_adjustment_detail_applied: Mapped[list['LedgerAdjustmentDetailApplied']]

class WorksheetPaymentContractAdvance(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_payment_contract_advance_id: Mapped[int]
    contract_advance_id: Mapped[int]
    statement_period_id: Mapped[int]
    exchange_rate_statement_period_id: Mapped[int]
    payment_name: Mapped[str]
    amount: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    amount_payee_currency: Mapped[decimal.Decimal]
    payee_currency_code: Mapped[str]
    exchange_rate: Mapped[decimal.Decimal]
    withholding_tax_amount: Mapped[decimal.Decimal]
    vat_amount: Mapped[decimal.Decimal]
    amount_after_withholding_and_vat: Mapped[decimal.Decimal]
    withholding_tax_amount_payee_currency: Mapped[decimal.Decimal]
    vat_amount_payee_currency: Mapped[decimal.Decimal]
    amount_after_withholding_and_vat_payee_currency: Mapped[decimal.Decimal]
    is_internal: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    us_source_income_rate: Mapped[decimal.Decimal | None]
    salesforce_id: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    contract_advance: Mapped['ContractAdvance']
    exchange_rate_statement_period: Mapped['StatementPeriod']
    statement_period: Mapped['StatementPeriod']

class ContractTermScheduleHistory(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    contract_term_schedule_history_id: Mapped[int]
    contract_term_schedule_id: Mapped[int]
    contract_term_id: Mapped[int]
    schedule_id: Mapped[int]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    deleted_by: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    contract_term: Mapped['ContractTerm']
    contract_term_schedule: Mapped['ContractTermSchedule']
    schedule: Mapped['Schedule']

class LedgerAdjustmentDetailApplied(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_detail_applied_id: Mapped[int]
    adjustment_amount: Mapped[decimal.Decimal]
    adjustment_currency_code: Mapped[str]
    adjustment_amount_payee_currency: Mapped[decimal.Decimal]
    adjustment_payee_currency_code: Mapped[str]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    ledger_adjustment_detail_id: Mapped[int | None]
    worksheet_adjustment_id: Mapped[int | None]
    worksheet_adjustment_detail_id: Mapped[int | None]
    apply_to_flowthrough_payment: Mapped[int | None]
    ledger_adjustment_detail: Mapped[LedgerAdjustmentDetail | None]
    worksheet_adjustment_detail: Mapped[WorksheetAdjustmentDetail | None]
    worksheet_adjustment: Mapped[WorksheetAdjustment | None]
    ledger_adjustment_adjustment_detail_applied: Mapped[
        list['LedgerAdjustmentAdjustmentDetailApplied']
    ]

class LedgerReserveReleaseSchedule(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_reserve_release_schedule_id: Mapped[int]
    abacus_event_id: Mapped[int]
    account_id: Mapped[int]
    taken_statement_period_id: Mapped[int]
    release_statement_period_id: Mapped[int]
    ledger_reserve_taken_id: Mapped[int]
    currency_code: Mapped[str]
    installment_amount: Mapped[decimal.Decimal]
    outstanding_amount_after_installment: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    early_release_date: Mapped[datetime.datetime | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    ledger_reserve_taken: Mapped['LedgerReserveTaken']
    release_statement_period: Mapped['StatementPeriod']
    taken_statement_period: Mapped['StatementPeriod']
    ledger_reserve_release: Mapped[list['LedgerReserveRelease']]

class PaymentAllocationLedgerAdjustment(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    payment_allocation_ledger_adjustment_id: Mapped[int]
    payment_allocation_id: Mapped[int]
    ledger_adjustment_applied_id: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    ledger_adjustment_applied: Mapped['LedgerAdjustmentApplied']
    payment_allocation: Mapped['PaymentAllocation']

class WorksheetAccountContractPayableAfterTax(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_account_contract_payable_after_tax_id: Mapped[int]
    worksheet_account_contract_closing_balance_id: Mapped[int]
    contract_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    abacus_event_id: Mapped[int]
    payable_amount_pre_tax: Mapped[decimal.Decimal]
    payable_amount_post_tax: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    country_of_tax_residence: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    tax_withholding_amount: Mapped[decimal.Decimal | None]
    vat_amount: Mapped[decimal.Decimal | None]
    country_of_tax_policy: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped['Contract']
    statement_period: Mapped['StatementPeriod']
    worksheet_account_contract_closing_balance: Mapped[
        'WorksheetAccountContractClosingBalance'
    ]
    payment_group_payment_account_detail: Mapped[
        list['PaymentGroupPaymentAccountDetail']
    ]
    worksheet_account_contract_payable_details: Mapped[
        list['WorksheetAccountContractPayableDetails']
    ]

class WorksheetAccountContractTaxableRevenue(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    account_contract_taxable_revenue_id: Mapped[int]
    contract_id: Mapped[int]
    account_id: Mapped[int]
    reference_payment_entity_id: Mapped[int]
    statement_period_id: Mapped[int]
    abacus_event_id: Mapped[int]
    amount: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    revenue_transaction_type: Mapped[str]
    is_us_revenue: Mapped[int]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    worksheet_account_contract_closing_balance_id: Mapped[int | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    abacus_event: Mapped['AbacusEvent']
    account: Mapped['Account']
    contract: Mapped['Contract']
    reference_payment_entity: Mapped['ReferencePaymentEntity']
    statement_period: Mapped['StatementPeriod']
    worksheet_account_contract_closing_balance: Mapped[
        WorksheetAccountContractClosingBalance | None
    ]

class LedgerAdjustmentAdjustmentDetailApplied(Base):
    __tablename__: str
    __table_args__: Incomplete
    ledger_adjustment_adjustment_detail_applied_id: Mapped[int]
    ledger_adjustment_applied_id: Mapped[int]
    ledger_adjustment_detail_applied_id: Mapped[int]
    ledger_adjustment_applied: Mapped['LedgerAdjustmentApplied']
    ledger_adjustment_detail_applied: Mapped['LedgerAdjustmentDetailApplied']

class LedgerReserveRelease(Base, CreateMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    ledger_reserve_release_id: Mapped[int]
    abacus_event_id: Mapped[int]
    statement_period_id: Mapped[int]
    ledger_reserve_release_schedule_id: Mapped[int]
    installment_amount: Mapped[decimal.Decimal]
    created_by: Mapped[str]
    created_at: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    abacus_event: Mapped['AbacusEvent']
    ledger_reserve_release_schedule: Mapped['LedgerReserveReleaseSchedule']
    statement_period: Mapped['StatementPeriod']

class PaymentGroupPaymentAccountDetail(Base, CreateMixin, SoftDeleteMixin, UpdateMixin):
    __tablename__: str
    __table_args__: Incomplete
    payment_group_payment_account_detail_id: Mapped[int]
    payment_group_payment_account_id: Mapped[int]
    worksheet_account_contract_payable_after_tax_id: Mapped[int]
    account_id: Mapped[int]
    contract_id: Mapped[int]
    payable_amount_pre_tax: Mapped[decimal.Decimal]
    payable_amount_post_tax: Mapped[decimal.Decimal]
    currency_code: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    tax_withholding_amount: Mapped[decimal.Decimal | None]
    vat_amount: Mapped[decimal.Decimal | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    contract: Mapped['Contract']
    payment_group_payment_account: Mapped['PaymentGroupPaymentAccount']
    worksheet_account_contract_payable_after_tax: Mapped[
        'WorksheetAccountContractPayableAfterTax'
    ]

class WorksheetAccountContractPayableDetails(
    Base, CreateMixin, SoftDeleteMixin, UpdateMixin
):
    __tablename__: str
    __table_args__: Incomplete
    worksheet_account_contract_payable_details_id: Mapped[int]
    contract_id: Mapped[int]
    account_id: Mapped[int]
    statement_period_id: Mapped[int]
    target_table: Mapped[str]
    target_id: Mapped[int]
    payable_detail_type_id: Mapped[int]
    amount_payable: Mapped[decimal.Decimal]
    currency: Mapped[str]
    created_at: Mapped[datetime.datetime]
    created_by: Mapped[str]
    last_modified: Mapped[datetime.datetime]
    last_modified_by: Mapped[str]
    worksheet_account_contract_payable_after_tax_id: Mapped[int | None]
    reference_target_table: Mapped[str | None]
    reference_target_id: Mapped[int | None]
    notes: Mapped[str | None]
    deleted_at: Mapped[datetime.datetime | None]
    deleted_by: Mapped[str | None]
    account: Mapped['Account']
    contract: Mapped['Contract']
    payable_detail_type: Mapped['ReferencePayableDetailType']
    statement_period: Mapped['StatementPeriod']
    worksheet_account_contract_payable_after_tax: Mapped[
        WorksheetAccountContractPayableAfterTax | None
    ]
