"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from enum import Enum
from gusto_embedded.types import BaseModel
from typing import Optional
from typing_extensions import NotRequired, TypedDict


class ExternalPayrollBasicStatus(str, Enum):
    r"""The status of the external payroll. The status will be `unprocessed` when the external payroll is created and transition to `processed` once tax liabilities are entered and finalized.  Once in the `processed` status all actions that can edit an external payroll will be disabled."""

    UNPROCESSED = "unprocessed"
    PROCESSED = "processed"


class ExternalPayrollBasicTypedDict(TypedDict):
    r"""The representation of an external payroll with minimal information."""

    uuid: str
    r"""The UUID of the external payroll."""
    company_uuid: NotRequired[str]
    r"""The UUID of the company."""
    check_date: NotRequired[str]
    r"""External payroll's check date."""
    payment_period_start_date: NotRequired[str]
    r"""External payroll's pay period start date."""
    payment_period_end_date: NotRequired[str]
    r"""External payroll's pay period end date."""
    status: NotRequired[ExternalPayrollBasicStatus]
    r"""The status of the external payroll. The status will be `unprocessed` when the external payroll is created and transition to `processed` once tax liabilities are entered and finalized.  Once in the `processed` status all actions that can edit an external payroll will be disabled."""


class ExternalPayrollBasic(BaseModel):
    r"""The representation of an external payroll with minimal information."""

    uuid: str
    r"""The UUID of the external payroll."""

    company_uuid: Optional[str] = None
    r"""The UUID of the company."""

    check_date: Optional[str] = None
    r"""External payroll's check date."""

    payment_period_start_date: Optional[str] = None
    r"""External payroll's pay period start date."""

    payment_period_end_date: Optional[str] = None
    r"""External payroll's pay period end date."""

    status: Optional[ExternalPayrollBasicStatus] = None
    r"""The status of the external payroll. The status will be `unprocessed` when the external payroll is created and transition to `processed` once tax liabilities are entered and finalized.  Once in the `processed` status all actions that can edit an external payroll will be disabled."""
