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

import typing

import pydantic
from ......core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .admitting_diagnosis_new import AdmittingDiagnosisNew
from .condition_information_new import ConditionInformationNew
from .diagnosis_related_group_new import DiagnosisRelatedGroupNew
from .external_cause_of_injury_new import ExternalCauseOfInjuryNew
from .occurrence_information_new import OccurrenceInformationNew
from .occurrence_span_information_new import OccurrenceSpanInformationNew
from .other_diagnosis_information_new import OtherDiagnosisInformationNew
from .other_procedure_information_new import OtherProcedureInformationNew
from .patient_reason_for_visit_new import PatientReasonForVisitNew
from .principal_diagnosis_new import PrincipalDiagnosisNew
from .principal_procedure_information_new import PrincipalProcedureInformationNew
from .treatment_code_information_new import TreatmentCodeInformationNew
from .value_information_new import ValueInformationNew


class HealthCareCodeInformationCreate(UniversalBaseModel):
    principal_diagnosis: typing.Optional[PrincipalDiagnosisNew] = None
    other_diagnosis_information: typing.Optional[typing.List[OtherDiagnosisInformationNew]] = None
    admitting_diagnosis: typing.Optional[AdmittingDiagnosisNew] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    patient_reasons_for_visit: typing.Optional[typing.List[PatientReasonForVisitNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    external_causes_of_injury: typing.Optional[typing.List[ExternalCauseOfInjuryNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    diagnosis_related_groups: typing.Optional[DiagnosisRelatedGroupNew] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    principal_procedure: typing.Optional[PrincipalProcedureInformationNew] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    other_procedure_information: typing.Optional[typing.List[OtherProcedureInformationNew]] = pydantic.Field(
        default=None
    )
    """
    This object only applies to 837i institutional claim forms.
    """

    occurrence_span_information: typing.Optional[typing.List[OccurrenceSpanInformationNew]] = pydantic.Field(
        default=None
    )
    """
    This object only applies to 837i institutional claim forms.
    """

    occurrence_information: typing.Optional[typing.List[OccurrenceInformationNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    treatment_code_information: typing.Optional[typing.List[TreatmentCodeInformationNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    value_information: typing.Optional[typing.List[ValueInformationNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    condition_information: typing.Optional[typing.List[ConditionInformationNew]] = pydantic.Field(default=None)
    """
    This object only applies to 837i institutional claim forms.
    """

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow
