# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

from ......core.datetime_utils import serialize_datetime
from .claim_submission_record_create import ClaimSubmissionRecordCreate

try:
    import pydantic.v1 as pydantic  # type: ignore
except ImportError:
    import pydantic  # type: ignore


class ExternalClaimSubmissionCreate(pydantic.BaseModel):
    """
    import datetime

    from candid import ClaimSubmissionPayerResponsibilityType
    from candid.resources.claim_submission.v_1 import (
        ClaimFrequencyTypeCode, ClaimSubmissionRecordCreate,
        ExternalClaimSubmissionCreate)

    ExternalClaimSubmissionCreate(claim_created_at=datetime.datetime.fromisoformat("2023-01-01 12:00:00+00:00", ), patient_control_number="PATIENT_CONTROL_NUMBER", submission_records=[ClaimSubmissionRecordCreate(submitted_at=datetime.datetime.fromisoformat("2023-01-01 13:00:00+00:00", ), claim_frequency_code=ClaimFrequencyTypeCode.1, payer_responsibility=ClaimSubmissionPayerResponsibilityType.PRIMARY, ), ClaimSubmissionRecordCreate(submitted_at=datetime.datetime.fromisoformat("2023-01-04 12:00:00+00:00", ), claim_frequency_code=ClaimFrequencyTypeCode.6, payer_responsibility=ClaimSubmissionPayerResponsibilityType.PRIMARY, )], )
    """

    claim_created_at: dt.datetime = pydantic.Field(description="When the claim was created in the external system.")
    patient_control_number: str = pydantic.Field(
        description=(
            "The Patient Control Number sent on the claim to the payer. To guarantee compatibility with all payers, this field must consist\n"
            "only of uppercase letters and numbers and be no more than 14 characters long.\n"
        )
    )
    submission_records: typing.List[ClaimSubmissionRecordCreate] = pydantic.Field(
        description=(
            "A successful claim submission record will be created for each value provided.\n"
            "An empty list may be provided for cases where the claim originated in an external system but was never submitted to a payer.\n"
        )
    )

    def json(self, **kwargs: typing.Any) -> str:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().json(**kwargs_with_defaults)

    def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().dict(**kwargs_with_defaults)

    class Config:
        frozen = True
        smart_union = True
        json_encoders = {dt.datetime: serialize_datetime}
