servico_plugnotas_teste/Models/nfe.py
2026-07-10 16:32:22 -03:00

115 lines
2.7 KiB
Python

from pydantic import BaseModel
from typing import List, Optional, Literal
EstadoEnum = Literal[
"AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS", "MT",
"PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO"
]
TipoLogradouroEnum = Literal[
"Alameda", "Avenida", "Chácara", "Colônia", "Condomínio", "Estância", "Estrada",
"Fazenda", "Praça", "Prolongamento", "Rodovia", "Rua", "Sítio", "Travessa", "Vicinal", "Eqnp"
]
class Emitente(BaseModel):
cpfCnpj: str
inscricaoEstadual: Optional[str] = None
class Endereco(BaseModel):
logradouro: str
numero: str
bairro: str
codigoCidade: str
estado: EstadoEnum
cep: str
tipoLogradouro: TipoLogradouroEnum
codigoPais: Optional[str] = "1058"
complemento: Optional[str] = None
descricaoCidade: Optional[str] = None
descricaoPais: Optional[str] = "Brasil"
class Destinatario(BaseModel):
cpfCnpj: str
razaoSocial: str
nomeFantasia: Optional[str] = None
email: Optional[str] = None
inscricaoEstadual: Optional[str] = None
inscricaoMunicipal: Optional[str] = None
inscricaoSuframa: Optional[str] = None
orgaoPublico: Optional[bool] = False
endereco: Endereco
class ValorTributavel(BaseModel):
comercial: float
tributavel: float
class BaseCalculoIcms(BaseModel):
modalidadeDeterminacao: int
valor: float
class Icms(BaseModel):
origem: str
cst: str
baseCalculo: BaseCalculoIcms
aliquota: float
valor: float
class BaseCalculoPis(BaseModel):
valor: float
quantidade: int
class Pis(BaseModel):
cst: str
baseCalculo: BaseCalculoPis
aliquota: float
valor: float
class BaseCalculoCofins(BaseModel):
valor: float
class Cofins(BaseModel):
cst: str
baseCalculo: BaseCalculoCofins
aliquota: float
valor: float
class Tributos(BaseModel):
icms: Optional[Icms] = None
pis: Optional[Pis] = None
cofins: Optional[Cofins] = None
class ItemNFe(BaseModel):
codigo: str
descricao: str
ncm: str
cest: Optional[str] = None
cfop: str
valorUnitario: ValorTributavel
valor: float
tributos: Tributos
class Pagamento(BaseModel):
aVista: Optional[bool] = True
meio: Optional[str] = "01"
valor: float
class Telefone(BaseModel):
ddd: str
numero: str
class ResponsavelTecnico(BaseModel):
cpfCnpj: str
nome: str
email: str
telefone: Telefone
class NFe(BaseModel):
idIntegracao: str
presencial: bool
consumidorFinal: bool
natureza: str
emitente: Emitente
destinatario: Destinatario
itens: List[ItemNFe]
pagamentos: List[Pagamento]
responsavelTecnico: Optional[ResponsavelTecnico] = None