You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.3 KiB
123 lines
4.3 KiB
#!/usr/bin/env python
|
|
# *-* encoding: utf8 *-*
|
|
|
|
from pynfe.processamento.comunicacao import ComunicacaoSefaz
|
|
from pynfe.entidades.cliente import Cliente
|
|
from pynfe.entidades.emitente import Emitente
|
|
from pynfe.entidades.notafiscal import NotaFiscal
|
|
from pynfe.entidades.fonte_dados import _fonte_dados
|
|
from pynfe.processamento.serializacao import SerializacaoXML
|
|
from pynfe.processamento.assinatura import AssinaturaA1
|
|
from pynfe.utils.flags import CODIGO_BRASIL
|
|
from decimal import Decimal
|
|
import datetime
|
|
|
|
certificado = "/home/user/certificado.pfx"
|
|
senha = 'senha'
|
|
uf = 'pr'
|
|
homologacao = True
|
|
|
|
# emitente
|
|
emitente = Emitente(
|
|
razao_social='NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL',
|
|
nome_fantasia='Nome Fantasia da Empresa',
|
|
cnpj='99999999000199', # cnpj apenas números
|
|
codigo_de_regime_tributario='1', # 1 para simples nacional ou 3 para normal
|
|
inscricao_estadual='9999999999', # numero de IE da empresa
|
|
inscricao_municipal='12345',
|
|
cnae_fiscal='9999999', # cnae apenas números
|
|
endereco_logradouro='Rua da Paz',
|
|
endereco_numero='666',
|
|
endereco_bairro='Sossego',
|
|
endereco_municipio='Paranavaí',
|
|
endereco_uf='PR',
|
|
endereco_cep='87704000',
|
|
endereco_pais=CODIGO_BRASIL
|
|
)
|
|
|
|
# cliente
|
|
cliente = Cliente(
|
|
razao_social='MARIANA CARVALHO SILVA',
|
|
tipo_documento='CPF', #CPF ou CNPJ
|
|
email='email@email.com',
|
|
numero_documento='12345678900', # numero do cpf ou cnpj
|
|
indicador_ie=9, # 9=Não contribuinte
|
|
endereco_logradouro='Rua dos Bobos',
|
|
endereco_numero='Zero',
|
|
endereco_complemento='Ao lado de lugar nenhum',
|
|
endereco_bairro='Aquele Mesmo',
|
|
endereco_municipio='Brasilia',
|
|
endereco_uf='DF',
|
|
endereco_cep='12345123',
|
|
endereco_pais=CODIGO_BRASIL,
|
|
endereco_telefone='11912341234',
|
|
)
|
|
|
|
# Nota Fiscal
|
|
nota_fiscal = NotaFiscal(
|
|
emitente=emitente,
|
|
cliente=cliente,
|
|
uf='PR',
|
|
natureza_operacao='VENDA', # venda, compra, transferência, devolução, etc
|
|
forma_pagamento=0, # 0=Pagamento à vista; 1=Pagamento a prazo; 2=Outros.
|
|
tipo_pagamento=1,
|
|
modelo=55, # 55=NF-e; 65=NFC-e
|
|
serie='1',
|
|
numero_nf='111', # Número do Documento Fiscal.
|
|
data_emissao=datetime.datetime.now(),
|
|
data_saida_entrada=datetime.datetime.now(),
|
|
tipo_documento=1, # 0=entrada; 1=saida
|
|
municipio='4118402', # Código IBGE do Município
|
|
tipo_impressao_danfe=1, # 0=Sem geração de DANFE;1=DANFE normal, Retrato;2=DANFE normal Paisagem;3=DANFE Simplificado;4=DANFE NFC-e;
|
|
forma_emissao='1', # 1=Emissão normal (não em contingência);
|
|
cliente_final=1, # 0=Normal;1=Consumidor final;
|
|
indicador_destino=1,
|
|
indicador_presencial=1,
|
|
finalidade_emissao='1', # 1=NF-e normal;2=NF-e complementar;3=NF-e de ajuste;4=Devolução de mercadoria.
|
|
processo_emissao='0', #0=Emissão de NF-e com aplicativo do contribuinte;
|
|
transporte_modalidade_frete=1,
|
|
informacoes_adicionais_interesse_fisco='Mensagem complementar',
|
|
totais_tributos_aproximado=Decimal('21.06'),
|
|
)
|
|
|
|
# Produto
|
|
nota_fiscal.adicionar_produto_servico(
|
|
codigo='000328', # id do produto
|
|
descricao='Produto teste',
|
|
ncm='99999999',
|
|
#cest='0100100', # NT2015/003
|
|
cfop='5102',
|
|
unidade_comercial='UN',
|
|
quantidade_comercial=Decimal('12'), # 12 unidades
|
|
valor_unitario_comercial=Decimal('9.75'), # preço unitário
|
|
valor_total_bruto=Decimal('117.00'), # preço total
|
|
unidade_tributavel='UN',
|
|
quantidade_tributavel=Decimal('12'),
|
|
valor_unitario_tributavel=Decimal('9.75'),
|
|
ind_total=1,
|
|
icms_modalidade='102',
|
|
icms_origem=0,
|
|
icms_csosn='400',
|
|
pis_modalidade='07',
|
|
cofins_modalidade='07',
|
|
valor_tributos_aprox='21.06'
|
|
)
|
|
|
|
# serialização
|
|
serializador = SerializacaoXML(_fonte_dados, homologacao=homologacao)
|
|
nfe = serializador.exportar()
|
|
|
|
# assinatura
|
|
a1 = AssinaturaA1(certificado, senha)
|
|
xml = a1.assinar(nfe)
|
|
|
|
# envio
|
|
con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
|
|
envio = con.autorizacao(modelo='nfe', nota_fiscal=xml)
|
|
|
|
# em caso de sucesso o retorno será o xml autorizado
|
|
if envio[0] == 0:
|
|
print (envio[1].text)
|
|
# em caso de erro o retorno será o xml de resposta da SEFAZ
|
|
else:
|
|
print (envio[1].text)
|