Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs. Co-authored-by: Cursor <cursoragent@cursor.com>
244 lines
5.5 KiB
Python
244 lines
5.5 KiB
Python
"""Foundation DTOs."""
|
|
from __future__ import annotations
|
|
|
|
from datetime import date, datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.models.types import AccountCategory, AccountStatus, AccountType, FiscalPeriodStatus
|
|
from app.schemas.common import ORMBase
|
|
|
|
|
|
class ChartOfAccountsCreate(BaseModel):
|
|
name: str = Field(max_length=255)
|
|
code: str = Field(max_length=50)
|
|
description: str | None = None
|
|
is_default: bool = False
|
|
|
|
|
|
class ChartOfAccountsUpdate(BaseModel):
|
|
name: str | None = Field(default=None, max_length=255)
|
|
description: str | None = None
|
|
is_default: bool | None = None
|
|
is_active: bool | None = None
|
|
|
|
|
|
class ChartOfAccountsRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
name: str
|
|
code: str
|
|
description: str | None
|
|
is_default: bool
|
|
is_active: bool
|
|
created_at: datetime
|
|
|
|
|
|
class AccountCreate(BaseModel):
|
|
chart_id: UUID
|
|
parent_id: UUID | None = None
|
|
code: str = Field(max_length=50)
|
|
name: str = Field(max_length=255)
|
|
account_type: AccountType
|
|
account_category: AccountCategory
|
|
level: int = 1
|
|
is_group: bool = False
|
|
is_postable: bool = True
|
|
currency_id: UUID | None = None
|
|
description: str | None = None
|
|
|
|
|
|
class AccountUpdate(BaseModel):
|
|
parent_id: UUID | None = None
|
|
name: str | None = Field(default=None, max_length=255)
|
|
account_type: AccountType | None = None
|
|
account_category: AccountCategory | None = None
|
|
level: int | None = None
|
|
is_group: bool | None = None
|
|
is_postable: bool | None = None
|
|
currency_id: UUID | None = None
|
|
description: str | None = None
|
|
status: AccountStatus | None = None
|
|
|
|
|
|
class AccountRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
chart_id: UUID
|
|
parent_id: UUID | None = None
|
|
code: str
|
|
name: str
|
|
account_type: AccountType
|
|
account_category: AccountCategory
|
|
level: int
|
|
is_group: bool
|
|
is_postable: bool
|
|
status: AccountStatus
|
|
description: str | None = None
|
|
created_at: datetime
|
|
|
|
|
|
class CurrencyCreate(BaseModel):
|
|
code: str = Field(max_length=3)
|
|
name: str = Field(max_length=100)
|
|
symbol: str | None = None
|
|
decimal_places: int = 2
|
|
is_base: bool = False
|
|
|
|
|
|
class CurrencyUpdate(BaseModel):
|
|
name: str | None = Field(default=None, max_length=100)
|
|
symbol: str | None = None
|
|
decimal_places: int | None = None
|
|
is_base: bool | None = None
|
|
is_active: bool | None = None
|
|
|
|
|
|
class CurrencyRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
code: str
|
|
name: str
|
|
symbol: str | None
|
|
is_base: bool
|
|
is_active: bool
|
|
|
|
|
|
class FiscalYearCreate(BaseModel):
|
|
name: str
|
|
start_date: date
|
|
end_date: date
|
|
is_current: bool = False
|
|
|
|
|
|
class FiscalYearUpdate(BaseModel):
|
|
name: str | None = None
|
|
start_date: date | None = None
|
|
end_date: date | None = None
|
|
is_current: bool | None = None
|
|
|
|
|
|
class FiscalYearRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
name: str
|
|
start_date: date
|
|
end_date: date
|
|
is_current: bool
|
|
is_closed: bool
|
|
|
|
|
|
class FiscalPeriodCreate(BaseModel):
|
|
fiscal_year_id: UUID
|
|
name: str
|
|
period_number: int
|
|
start_date: date
|
|
end_date: date
|
|
is_current: bool = False
|
|
|
|
|
|
class FiscalPeriodUpdate(BaseModel):
|
|
name: str | None = None
|
|
start_date: date | None = None
|
|
end_date: date | None = None
|
|
is_current: bool | None = None
|
|
status: FiscalPeriodStatus | None = None
|
|
|
|
|
|
class FiscalPeriodRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
fiscal_year_id: UUID
|
|
name: str
|
|
period_number: int
|
|
start_date: date
|
|
end_date: date
|
|
status: FiscalPeriodStatus
|
|
is_current: bool
|
|
|
|
|
|
class CostCenterCreate(BaseModel):
|
|
code: str
|
|
name: str
|
|
parent_id: UUID | None = None
|
|
|
|
|
|
class CostCenterUpdate(BaseModel):
|
|
name: str | None = None
|
|
parent_id: UUID | None = None
|
|
is_active: bool | None = None
|
|
|
|
|
|
class CostCenterRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
code: str
|
|
name: str
|
|
parent_id: UUID | None = None
|
|
is_active: bool
|
|
|
|
|
|
class ProjectCreate(BaseModel):
|
|
code: str
|
|
name: str
|
|
start_date: date | None = None
|
|
end_date: date | None = None
|
|
|
|
|
|
class ProjectUpdate(BaseModel):
|
|
name: str | None = None
|
|
start_date: date | None = None
|
|
end_date: date | None = None
|
|
is_active: bool | None = None
|
|
|
|
|
|
class ProjectRead(ORMBase):
|
|
id: UUID
|
|
tenant_id: UUID
|
|
code: str
|
|
name: str
|
|
start_date: date | None = None
|
|
end_date: date | None = None
|
|
is_active: bool
|
|
|
|
|
|
class SetupStatusRead(BaseModel):
|
|
has_chart: bool
|
|
has_accounts: bool
|
|
has_currency: bool
|
|
has_base_currency: bool
|
|
has_fiscal_year: bool
|
|
has_fiscal_period: bool
|
|
has_cash_box: bool
|
|
has_customer: bool
|
|
has_voucher: bool
|
|
completed_steps: int
|
|
total_steps: int
|
|
percent: int
|
|
|
|
|
|
class CoaTemplateAccount(BaseModel):
|
|
code: str
|
|
name: str
|
|
account_type: AccountType
|
|
account_category: AccountCategory
|
|
level: int = 1
|
|
is_group: bool = False
|
|
is_postable: bool = True
|
|
parent_code: str | None = None
|
|
|
|
|
|
class CoaTemplateRead(BaseModel):
|
|
id: str
|
|
name: str
|
|
description: str
|
|
business_type: str
|
|
accounts: list[CoaTemplateAccount]
|
|
|
|
|
|
class CoaTemplateImportRequest(BaseModel):
|
|
chart_id: UUID | None = None
|
|
chart_name: str | None = None
|
|
chart_code: str | None = None
|