"""Schema dữ liệu chuẩn tham chiếu TT91 cho DSCons."""

from __future__ import annotations

from pydantic import BaseModel


class CapitalSource(BaseModel):
    """Nguồn vốn."""

    source_code: str
    source_name: str
    amount: float | None = None


class CostStructure(BaseModel):
    """Cơ cấu chi phí."""

    cost_code: str
    cost_name: str
    approved_amount: float | None = None
    settled_amount: float | None = None


class CompletedVolumeItem(BaseModel):
    """Khối lượng hoàn thành."""

    item_code: str
    item_name: str
    unit: str | None = None
    contract_quantity: float | None = None
    completed_quantity: float | None = None
    accepted_quantity: float | None = None
    unit_price: float | None = None
    amount: float | None = None


class PaymentAllocationItem(BaseModel):
    """Phân bổ thanh toán."""

    period_code: str
    payment_stage: str | None = None
    requested_amount: float | None = None
    approved_amount: float | None = None
    paid_amount: float | None = None
    cumulative_paid_amount: float | None = None


class AdvanceRecoveryItem(BaseModel):
    """Thu hồi tạm ứng."""

    advance_amount: float | None = None
    recovered_amount: float | None = None
    remaining_advance_amount: float | None = None
    recovery_rate: float | None = None


class SettlementSummary(BaseModel):
    """Tổng hợp quyết toán."""

    total_approved_investment: float | None = None
    total_contract_value: float | None = None
    total_completed_value: float | None = None
    total_paid_value: float | None = None
    total_settlement_value: float | None = None
    difference_value: float | None = None


class AuditDifferenceItem(BaseModel):
    """Sai khác kiểm toán."""

    issue_code: str
    issue_group: str | None = None
    description: str
    recommended_adjustment: float | None = None
    legal_basis: str | None = None


class ComplianceIssueItem(BaseModel):
    """Vấn đề tuân thủ."""

    issue_code: str
    severity: str | None = None
    description: str
    legal_reference: str | None = None
    remediation_action: str | None = None
