"""This file was generated by xsdata, v24.11, on 2025-07-14 05:12:19

Generator: DataclassGenerator
See: https://xsdata.readthedocs.io/
"""

from dataclasses import dataclass, field
from enum import Enum
from typing import Optional

from nfelib import CommonMixin


@dataclass
class TcredPres(CommonMixin):
    """
    Tipo Crédito Presumido.

    :ivar cCredPres: Usar tabela Cred Presumido, para o emitente da
        nota.
    :ivar pCredPres: Percentual do Crédito Presumido
    :ivar vCredPres: Valor do Crédito Presumido
    :ivar vCredPresCondSus: Valor do Crédito Presumido Condição
        Suspensiva, preencher apenas para cCredPres que possui indicação
        de Condição Suspensiva
    """

    class Meta:
        name = "TCredPres"

    cCredPres: Optional[object] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    pCredPres: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vCredPres: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vCredPresCondSus: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TdevTrib(CommonMixin):
    """
    Tipo Devolução Tributo.

    :ivar vDevTrib: Valor do tributo devolvido. No fornecimento de
        energia elétrica, água, esgoto e gás natural e em outras
        hipóteses definidas no regulamento
    """

    class Meta:
        name = "TDevTrib"

    vDevTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TdifCbs(CommonMixin):
    """
    Tipo Diferimento.

    :ivar pDif: Percentual do diferimento
    :ivar vDif: Valor do diferimento
    """

    class Meta:
        name = "TDifCBS"

    pDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TdifIbs(CommonMixin):
    """
    Tipo Diferimento.

    :ivar pDif: Percentual do diferimento
    :ivar vDif: Valor do diferimento
    """

    class Meta:
        name = "TDifIBS"

    pDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


class TenteGov(Enum):
    """
    Tipo de Ente Governamental.
    """

    VALUE_1 = "1"
    VALUE_2 = "2"
    VALUE_3 = "3"
    VALUE_4 = "4"


@dataclass
class TibscbsmonoTot(CommonMixin):
    """
    Grupo de informações de totais da CBS/IBS com monofasia.

    :ivar vBCIBSCBS: Total Base de Calculo
    :ivar gIBS: Totalização do IBS
    :ivar gCBS: Totalização da CBS
    :ivar gMono: Totais da Monofasia Só deverá ser utilizado para DFe
        modelos 55 e 65
    """

    class Meta:
        name = "TIBSCBSMonoTot"

    vBCIBSCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    gIBS: Optional["TibscbsmonoTot.GIbs"] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gCBS: Optional["TibscbsmonoTot.GCbs"] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gMono: Optional["TibscbsmonoTot.GMono"] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )

    @dataclass
    class GIbs(CommonMixin):
        """
        :ivar gIBSUF: Totalização do IBS de competência da UF
        :ivar gIBSMun: Totalização do IBS de competência Municipal
        :ivar vIBS: Valor total do IBS
        :ivar vCredPres: Total do Crédito Presumido
        """

        gIBSUF: Optional["TibscbsmonoTot.GIbs.GIbsuf"] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
            },
        )
        gIBSMun: Optional["TibscbsmonoTot.GIbs.GIbsmun"] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
            },
        )
        vIBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPres: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )

        @dataclass
        class GIbsuf(CommonMixin):
            """
            :ivar vDif: Total do Diferimento
            :ivar vDevTrib: Total de devoluções de tributos
            :ivar vIBSUF: Valor total do IBS Estadual
            """

            vDif: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vDevTrib: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vIBSUF: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )

        @dataclass
        class GIbsmun(CommonMixin):
            """
            :ivar vDif: Total do Diferimento
            :ivar vDevTrib: Total de devoluções de tributos
            :ivar vIBSMun: Valor total do IBS Municipal
            """

            vDif: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vDevTrib: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vIBSMun: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )

    @dataclass
    class GCbs(CommonMixin):
        """
        :ivar vDif: Total do Diferimento
        :ivar vDevTrib: Total de devoluções de tributos
        :ivar vCBS: Valor total da CBS
        :ivar vCredPres: Total do Crédito Presumido
        """

        vDif: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vDevTrib: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPres: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )

    @dataclass
    class GMono(CommonMixin):
        """
        :ivar vIBSMono: Valor total do IBS monofásico
        :ivar vCBSMono: Valor total da CBS monofásica
        :ivar vIBSMonoReten: Valor total do IBS monofásico sujeito a
            retenção
        :ivar vCBSMonoReten: Valor total da CBS monofásica sujeita a
            retenção
        :ivar vIBSMonoRet: Valor do IBS monofásico retido anteriormente
        :ivar vCBSMonoRet: Valor da CBS monofásica retida anteriormente
        """

        vIBSMono: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCBSMono: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vIBSMonoReten: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCBSMonoReten: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vIBSMonoRet: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCBSMonoRet: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )


@dataclass
class Tibscbstot(CommonMixin):
    """
    Grupo de informações de totais da CBS/IBS.

    :ivar vBCIBSCBS: Total Base de Calculo
    :ivar gIBS: Totalização do IBS
    :ivar gCBS: Totalização da CBS
    """

    class Meta:
        name = "TIBSCBSTot"

    vBCIBSCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    gIBS: Optional["Tibscbstot.GIbs"] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    gCBS: Optional["Tibscbstot.GCbs"] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )

    @dataclass
    class GIbs(CommonMixin):
        """
        :ivar gIBSUF: Totalização do IBS de competência da UF
        :ivar gIBSMun: Totalização do IBS de competência Municipal
        :ivar vIBS: Valor total do IBS
        :ivar vCredPres: Total do Crédito Presumido
        :ivar vCredPresCondSus: Total do Crédito Presumido Condição
            Suspensiva
        """

        gIBSUF: Optional["Tibscbstot.GIbs.GIbsuf"] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
            },
        )
        gIBSMun: Optional["Tibscbstot.GIbs.GIbsmun"] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
            },
        )
        vIBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPres: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPresCondSus: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )

        @dataclass
        class GIbsuf(CommonMixin):
            """
            :ivar vDif: Total do Diferimento
            :ivar vDevTrib: Total de devoluções de tributos
            :ivar vIBSUF: Valor total do IBS Estadual
            """

            vDif: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vDevTrib: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vIBSUF: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )

        @dataclass
        class GIbsmun(CommonMixin):
            """
            :ivar vDif: Total do Diferimento
            :ivar vDevTrib: Total de devoluções de tributos
            :ivar vIBSMun: Valor total do IBS Municipal
            """

            vDif: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vDevTrib: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )
            vIBSMun: Optional[str] = field(
                default=None,
                metadata={
                    "type": "Element",
                    "required": True,
                    "white_space": "preserve",
                    "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
                },
            )

    @dataclass
    class GCbs(CommonMixin):
        """
        :ivar vDif: Total do Diferimento
        :ivar vDevTrib: Total de devoluções de tributos
        :ivar vCBS: Valor total da CBS
        :ivar vCredPres: Total do Crédito Presumido
        :ivar vCredPresCondSus: Total do Crédito Presumido Condição
            Suspensiva
        """

        vDif: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vDevTrib: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPres: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )
        vCredPresCondSus: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )


@dataclass
class Tis(CommonMixin):
    """
    Grupo de informações do Imposto Seletivo.

    :ivar CSTIS: Código Situação Tributária do Imposto Seletivo
    :ivar cClassTribIS:
    :ivar vBCIS: Valor do BC
    :ivar pIS: Alíquota do Imposto Seletivo (percentual)
    :ivar pISEspec: Alíquota do Imposto Seletivo (por valor)
    :ivar uTrib: Unidade de medida apropriada especificada em Lei
        Ordinaria para fins de apuração do Imposto Seletivo
    :ivar qTrib: Quantidade com abse no campo uTrib informado
    :ivar vIS: Valor do Imposto Seletivo calculado
    """

    class Meta:
        name = "TIS"

    CSTIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTribIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    vBCIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    pISEspec: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    uTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "min_length": 1,
            "max_length": 6,
            "white_space": "preserve",
            "pattern": r"[!-ÿ]{1}[ -ÿ]{0,}[!-ÿ]{1}|[!-ÿ]{1}",
        },
    )
    qTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0\.[1-9]{1}[0-9]{3}|0\.[0-9]{3}[1-9]{1}|0\.[0-9]{2}[1-9]{1}[0-9]{1}|0\.[0-9]{1}[1-9]{1}[0-9]{2}|[1-9]{1}[0-9]{0,10}(\.[0-9]{4})?",
        },
    )
    vIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class Tistot(CommonMixin):
    """
    Grupo de informações de totais do Imposto Seletivo.

    :ivar vIS: Valor Total do Imposto Seletivo
    """

    class Meta:
        name = "TISTot"

    vIS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class Tmonofasia(CommonMixin):
    """
    Tipo Monofasia.

    :ivar qBCMono: Quantidade tributada na monofasia
    :ivar adRemIBS: Alíquota ad rem do IBS
    :ivar adRemCBS: Alíquota ad rem da CBS
    :ivar vIBSMono: Valor do IBS monofásico
    :ivar vCBSMono: Valor da CBS monofásica
    :ivar qBCMonoReten: Quantidade tributada sujeita a retenção.
    :ivar adRemIBSReten: Alíquota ad rem do IBS sujeito a retenção
    :ivar vIBSMonoReten: Valor do IBS monofásico sujeito a retenção
    :ivar adRemCBSReten: Alíquota ad rem da CBS sujeita a retenção
    :ivar vCBSMonoReten: Valor da CBS monofásica sujeita a retenção
    :ivar qBCMonoRet: Quantidade tributada retida anteriormente
    :ivar adRemIBSRet: Alíquota ad rem do IBS retido anteriormente
    :ivar vIBSMonoRet: Valor do IBS retido anteriormente
    :ivar adRemCBSRet: Alíquota ad rem da CBS retida anteriormente
    :ivar vCBSMonoRet: Valor da CBS retida anteriormente
    :ivar pDifIBS: Percentual do diferimento do imposto monofásico
    :ivar vIBSMonoDif: Valor do IBS monofásico diferido
    :ivar pDifCBS: Percentual do diferimento do imposto monofásico
    :ivar vCBSMonoDif: Valor da CBS monofásica diferida
    :ivar vTotIBSMonoItem: Total de IBS monofásico do item
    :ivar vTotCBSMonoItem: Total da CBS monofásica do item
    """

    class Meta:
        name = "TMonofasia"

    qBCMono: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0\.[1-9]{1}[0-9]{3}|0\.[0-9]{3}[1-9]{1}|0\.[0-9]{2}[1-9]{1}[0-9]{1}|0\.[0-9]{1}[1-9]{1}[0-9]{2}|[1-9]{1}[0-9]{0,10}(\.[0-9]{4})?",
        },
    )
    adRemIBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    adRemCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vIBSMono: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vCBSMono: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    qBCMonoReten: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0\.[1-9]{1}[0-9]{3}|0\.[0-9]{3}[1-9]{1}|0\.[0-9]{2}[1-9]{1}[0-9]{1}|0\.[0-9]{1}[1-9]{1}[0-9]{2}|[1-9]{1}[0-9]{0,10}(\.[0-9]{4})?",
        },
    )
    adRemIBSReten: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vIBSMonoReten: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    adRemCBSReten: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vCBSMonoReten: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    qBCMonoRet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0\.[1-9]{1}[0-9]{3}|0\.[0-9]{3}[1-9]{1}|0\.[0-9]{2}[1-9]{1}[0-9]{1}|0\.[0-9]{1}[1-9]{1}[0-9]{2}|[1-9]{1}[0-9]{0,10}(\.[0-9]{4})?",
        },
    )
    adRemIBSRet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vIBSMonoRet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    adRemCBSRet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vCBSMonoRet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pDifIBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vIBSMonoDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pDifCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vCBSMonoDif: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vTotIBSMonoItem: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vTotCBSMonoItem: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


class ToperCompraGov(Enum):
    """
    Tipo da Operação com Ente Governamental.
    """

    VALUE_1 = "1"
    VALUE_2 = "2"


@dataclass
class Tred(CommonMixin):
    """
    Tipo Redução Base de Cálculo.

    :ivar pRedAliq: Percentual de redução de aliquota do cClassTrib
    :ivar pAliqEfet: Aliquota Efetiva que será aplicada a Base de
        Calculo
    """

    class Meta:
        name = "TRed"

    pRedAliq: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    pAliqEfet: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


class TtpCredPresIbszfm(Enum):
    """
    Tipo de classificação do Crédito Presumido IBS ZFM.
    """

    VALUE_0 = "0"
    VALUE_1 = "1"
    VALUE_2 = "2"
    VALUE_3 = "3"
    VALUE_4 = "4"


@dataclass
class TtransfCred(CommonMixin):
    """
    Tipo Transferência de Crédito.

    :ivar vIBS: Valor do IBS a ser transferido
    :ivar vCBS: Valor da CBS a ser transferida
    """

    class Meta:
        name = "TTransfCred"

    vIBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    vCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TtribCompraGov(CommonMixin):
    """
    Tipo Tributação Compra Governamental.

    :ivar pAliqIBSUF:
    :ivar vTribIBSUF: Valor que seria devido a UF, sem aplicação do Art.
        473. da LC 214/2025
    :ivar pAliqIBSMun:
    :ivar vTribIBSMun: Valor que seria devido ao município, sem
        aplicação do Art. 473. da LC 214/2025
    :ivar pAliqCBS:
    :ivar vTribCBS: Valor que seria devido a CBS, sem aplicação do Art.
        473. da LC 214/2025
    """

    class Meta:
        name = "TTribCompraGov"

    pAliqIBSUF: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribIBSUF: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pAliqIBSMun: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribIBSMun: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pAliqCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TtribRegular(CommonMixin):
    """
    Tipo Tributação Regular.

    :ivar CSTReg: Código da Situação Tributária do IBS e CBS Informar
        qual seria o CST caso não cumprida a condição
        resolutória/suspensiva
    :ivar cClassTribReg: Informar qual seria o cClassTrib caso não
        cumprida a condição resolutória/suspensiva
    :ivar pAliqEfetRegIBSUF: Alíquota do IBS da UF Informar como seria a
        Alíquota caso não cumprida a condição resolutória/suspensiva
    :ivar vTribRegIBSUF: Valor do IBS da UF Informar como seria o valor
        do Tributo caso não cumprida a condição resolutória/suspensiva
    :ivar pAliqEfetRegIBSMun: Alíquota do IBS do Município Informar como
        seria a Alíquota caso não cumprida a condição
        resolutória/suspensiva
    :ivar vTribRegIBSMun: Valor do IBS do Município Informar como seria
        o valor do Tributo caso não cumprida a condição
        resolutória/suspensiva
    :ivar pAliqEfetRegCBS: Alíquota da CBS Informar como seria a
        Alíquota caso não cumprida a condição resolutória/suspensiva
    :ivar vTribRegCBS: Valor da CBS Informar como seria o valor do
        Tributo caso não cumprida a condição resolutória/suspensiva
    """

    class Meta:
        name = "TTribRegular"

    CSTReg: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTribReg: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    pAliqEfetRegIBSUF: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribRegIBSUF: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pAliqEfetRegIBSMun: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribRegIBSMun: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    pAliqEfetRegCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    vTribRegCBS: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class Tcibs(CommonMixin):
    """
    Tipo CBS IBS Completo.

    :ivar vBC: Valor do BC
    :ivar gIBSUF: Grupo de informações do IBS na UF
    :ivar gIBSMun: Grupo de Informações do IBS no Município
    :ivar gCBS: Grupo de Tributação da CBS
    :ivar gTribRegular: Grupo de informações da Tributação Regular.
        Informar como seria a tributação caso não cumprida a condição
        resolutória/suspensiva. Exemplo 1: Art. 442, §4. Operações com
        ZFM e ALC. Exemplo 2: Operações com suspensão do tributo.
    :ivar gIBSCredPres: Grupo de Informações do Crédito Presumido
        referente ao IBS, quando aproveitado pelo emitente do documento.
    :ivar gCBSCredPres: Grupo de Informações do Crédito Presumido
        referente a CBS, quando aproveitado pelo emitente do documento.
    :ivar gTribCompraGov: Grupo de informações da composição do valor do
        IBS e da CBS em compras governamental
    """

    class Meta:
        name = "TCIBS"

    vBC: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )
    gIBSUF: Optional["Tcibs.GIbsuf"] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    gIBSMun: Optional["Tcibs.GIbsmun"] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    gCBS: Optional["Tcibs.GCbs"] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    gTribRegular: Optional[TtribRegular] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gIBSCredPres: Optional[TcredPres] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gCBSCredPres: Optional[TcredPres] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gTribCompraGov: Optional[TtribCompraGov] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )

    @dataclass
    class GIbsuf(CommonMixin):
        """
        :ivar pIBSUF: Aliquota do IBS de competência das UF
        :ivar gDif: Grupo de campos do Diferimento
        :ivar gDevTrib: Grupo de Informações da devolução de tributos
        :ivar gRed: Grupo de campos da redução de aliquota
        :ivar vIBSUF: Valor do IBS de competência das UF
        """

        pIBSUF: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
            },
        )
        gDif: Optional[TdifIbs] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gDevTrib: Optional[TdevTrib] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gRed: Optional[Tred] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        vIBSUF: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )

    @dataclass
    class GIbsmun(CommonMixin):
        """
        :ivar pIBSMun: Aliquota do IBS Municipal
        :ivar gDif: Grupo de campos do Diferimento
        :ivar gDevTrib: Grupo de Informações da devolução de tributos
        :ivar gRed: Grupo de campos da redução de aliquota
        :ivar vIBSMun: Valor do IBS Municipal
        """

        pIBSMun: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
            },
        )
        gDif: Optional[TdifIbs] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gDevTrib: Optional[TdevTrib] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gRed: Optional[Tred] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        vIBSMun: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )

    @dataclass
    class GCbs(CommonMixin):
        """
        :ivar pCBS: Aliquota da CBS
        :ivar gDif: Grupo de campos do Diferimento
        :ivar gDevTrib: Grupo de Informações da devolução de tributos
        :ivar gRed: Grupo de campos da redução de aliquota
        :ivar vCBS: Valor da CBS
        """

        pCBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
            },
        )
        gDif: Optional[TdifCbs] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gDevTrib: Optional[TdevTrib] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        gRed: Optional[Tred] = field(
            default=None,
            metadata={
                "type": "Element",
            },
        )
        vCBS: Optional[str] = field(
            default=None,
            metadata={
                "type": "Element",
                "required": True,
                "white_space": "preserve",
                "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
            },
        )


@dataclass
class TcompraGov(CommonMixin):
    """
    Tipo Compras Governamentais Cada DFe que utilizar deverá utilizar esses tipo no
    grupo ide.

    :ivar tpEnteGov: Para administração pública direta e suas autarquias
        e fundações: 1=União 2=Estados 3=Distrito Federal 4=Municípios
    :ivar pRedutor: Percentual de redução de aliquota em compra
        goverrnamental
    :ivar tpOperGov: Tipo da operação com ente governamental: 1 -
        Fornecimento 2 - Recebimento do Pagamento
    """

    class Meta:
        name = "TCompraGov"

    tpEnteGov: Optional[TenteGov] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    pRedutor: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )
    tpOperGov: Optional[ToperCompraGov] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )


@dataclass
class TcompraGovReduzido(CommonMixin):
    """
    Tipo Compras Governamentais Cada DFe que utilizar deverá utilizar esses tipo no
    grupo ide.

    :ivar tpEnteGov: Para administração pública direta e suas autarquias
        e fundações: 1=União 2=Estados 3=Distrito Federal 4=Municípios
    :ivar pRedutor: Percentual de redução de aliquota em compra
        goverrnamental
    """

    class Meta:
        name = "TCompraGovReduzido"

    tpEnteGov: Optional[TenteGov] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    pRedutor: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?",
        },
    )


@dataclass
class TcredPresIbszfm(CommonMixin):
    """
    Tipo Informações do crédito presumido de IBS para fornecimentos a partir da
    ZFM.

    :ivar tpCredPresIBSZFM: Classificação de acordo com o art. 450, §
        1º, da LC 214/25 para o cálculo do crédito presumido na ZFM 0 -
        Sem crédito presumido; 1 - Bens de consumo final (55%); 2 - Bens
        de capital (75%); 3 - Bens intermediários (90,25%); 4 - Bens de
        informática e outros definidos em legislação (100%). OBS:
        Percentuais definidos no art. 450, § 1º, da LC 214/25 para o
        cálculo do crédito presumido
    :ivar vCredPresIBSZFM: Valor do crédito presumido calculado sobre o
        saldo devedor apurado
    """

    class Meta:
        name = "TCredPresIBSZFM"

    tpCredPresIBSZFM: Optional[TtpCredPresIbszfm] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
        },
    )
    vCredPresIBSZFM: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "white_space": "preserve",
            "pattern": r"0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?",
        },
    )


@dataclass
class TtribBpe(CommonMixin):
    """
    Grupo de informações da Tributação do BPe.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    """

    class Meta:
        name = "TTribBPe"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )


@dataclass
class TtribCte(CommonMixin):
    """
    Grupo de informações da Tributação do CTe.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    """

    class Meta:
        name = "TTribCTe"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )


@dataclass
class TtribNf3E(CommonMixin):
    """
    Grupo de informações da Tributação da NF3e.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    """

    class Meta:
        name = "TTribNF3e"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )


@dataclass
class TtribNfce(CommonMixin):
    """
    Grupo de informações da Tributação da NFCe.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    :ivar gIBSCBSMono:
    """

    class Meta:
        name = "TTribNFCe"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gIBSCBSMono: Optional[Tmonofasia] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )


@dataclass
class TtribNfcom(CommonMixin):
    """
    Grupo de informações da Tributação da NFCom.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    """

    class Meta:
        name = "TTribNFCom"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )


@dataclass
class TtribNfe(CommonMixin):
    """
    Grupo de informações da Tributação da NFe.

    :ivar CST: Código Situação Tributária do IBS/CBS
    :ivar cClassTrib:
    :ivar gIBSCBS:
    :ivar gIBSCBSMono: Informar essa opção da Choice para Monofasia
    :ivar gTransfCred: Informar essa opção da Choice para o CST 800
    :ivar gCredPresIBSZFM: Classificação de acordo com o art. 450, § 1º,
        da LC 214/25 para o cálculo do crédito presumido na ZFM
    """

    class Meta:
        name = "TTribNFe"

    CST: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{3}",
        },
    )
    cClassTrib: Optional[str] = field(
        default=None,
        metadata={
            "type": "Element",
            "required": True,
            "white_space": "preserve",
            "pattern": r"\d{6}",
        },
    )
    gIBSCBS: Optional[Tcibs] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gIBSCBSMono: Optional[Tmonofasia] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gTransfCred: Optional[TtransfCred] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
    gCredPresIBSZFM: Optional[TcredPresIbszfm] = field(
        default=None,
        metadata={
            "type": "Element",
        },
    )
