115 lines
2.7 KiB
Python
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
|