Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rejeicao: Falha no Schema XML do lote de NFe #27

Closed
rodovalho opened this issue Oct 6, 2017 · 4 comments
Closed

Rejeicao: Falha no Schema XML do lote de NFe #27

rodovalho opened this issue Oct 6, 2017 · 4 comments

Comments

@rodovalho
Copy link

rodovalho commented Oct 6, 2017

Olá,

Seguindo com minha série de importunações aos desenvolvedores dessa lib :), segue em anexo o meu mais recente problema.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Header>
    <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao">
      <cUF>33</cUF>
      <versaoDados>3.10</versaoDados>
    </nfeCabecMsg>
  </soap:Header>
  <soap:Body>
    <nfeAutorizacaoLoteResult xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao">
      <retEnviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
        <tpAmb>2</tpAmb>
        <verAplic>SVRS201707171030</verAplic>
        <cStat>225</cStat>
        <xMotivo>Rejeicao: Falha no Schema XML do lote de NFe</xMotivo>
        <cUF>33</cUF>
        <dhRecbto>2017-10-06T18:10:49-03:00</dhRecbto>
      </retEnviNFe>
    </nfeAutorizacaoLoteResult>
  </soap:Body>
</soap:Envelope>

Lembrando que estou tentando gerar uma NFC-e.

Como referência para os futuros usuários, mais uma vez posto meu código atual, baseado no código disponível em https://github.com/leotada/PyNFe/wiki/Emiss%C3%A3o-de-NFCe com detalhes da empresa e cliente omitidos.

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, SerializacaoQrcode
from pynfe.processamento.assinatura import AssinaturaA1
from pynfe.utils.flags import CODIGO_BRASIL
from decimal import Decimal
import datetime

certificado = "XXXXXXX.pfx"
senha = 'XXXXXX'
uf = 'RJ' 
homologacao = True

# emitente
emitente = Emitente(
    razao_social='XXXXXXXXXXXXXXXX EIRELI - ME',
    nome_fantasia='XXXXXXXXX',
    cnpj='XXXXXXX',           # cnpj apenas números
    codigo_de_regime_tributario='1', # 1 para simples nacional ou 3 para normal
    inscricao_estadual='XXXXXXXX', # numero de IE da empresa
    inscricao_municipal='XXXXXXX',
    cnae_fiscal='5611201',           # cnae apenas números
    endereco_logradouro='XXXXXXXXXXXXXXX',
    endereco_numero='X',
    endereco_bairro='XXXXXXXXXX',
    endereco_municipio='Niteroi',
    endereco_uf='RJ',
    endereco_cep='XXXXXXXXXXXX',
    endereco_pais=CODIGO_BRASIL
)

# cliente
cliente = Cliente(
    razao_social='XXXXXXXXXXXXXXX',
    tipo_documento='CPF',           #CPF ou CNPJ
    email='XXXXXXXXXXXXXX@gmail.com',
    numero_documento='XXXXXXXXXXXX', # numero do cpf ou cnpj
    indicador_ie=9,                 # 9=Não contribuinte 
    endereco_logradouro='XXXXXXXXXXXXXX',
    endereco_numero='XX',
    endereco_complemento='XXXXXXXXX',
    endereco_bairro='XXXXX',
    endereco_municipio='Niteroi',
    endereco_uf='RJ',
    endereco_cep='XXXXXXX',
    endereco_pais=CODIGO_BRASIL,
    endereco_telefone='XXXXXXXX',
)

# Nota Fiscal
nota_fiscal = NotaFiscal(
   emitente=emitente,
   cliente=cliente,
   uf='RJ',
   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=65,                 # 55=NF-e; 65=NFC-e
   serie='1',
   numero_nf='001',           # Número do Documento Fiscal.
   data_emissao=datetime.datetime.now(),
   data_saida_entrada=datetime.datetime.now(),
   tipo_documento=1,          # 0=entrada; 1=saida
   municipio='3303302',       # Código IBGE do Município 
   tipo_impressao_danfe=4,    # 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='Vários Produtos',
    ncm='99999999',
    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)
nfce = serializador.exportar()

# assinatura
a1 = AssinaturaA1(certificado, senha)
xml = a1.assinar(nfce)

# token de homologacao
token = '000001'

# csc de homologação
csc = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

# gera e adiciona o qrcode no xml NT2015/003
xml_com_qrcode = SerializacaoQrcode().gerar_qrcode(token, csc, xml)

# envio
con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
envio = con.autorizacao(modelo='nfce', nota_fiscal=xml_com_qrcode)

# em caso de sucesso o retorno será o xml autorizado 
if envio[0] == 0:
    print('SUCESSO')
    print (envio[1].text)
# em caso de erro o retorno será o xml de resposta da SEFAZ
else:
    print('ERRO')
    print (envio[1].text)
    print (envio[2].text)

@juniortada
Copy link
Member

Está parecendo erro no preenchimento dos dados. Me manda o xml para eu poder analisar ou testa no validade de nota da SEFAZ RS.
Depois da linha: xml_com_qrcode = SerializacaoQrcode().gerar_qrcode(token, csc, xml)
coloca:
from lxml import etree
print(etree.tostring(xml_com_qrcode, encoding='unicode'))

Link do validador:

https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

@rodovalho
Copy link
Author

rodovalho commented Oct 6, 2017

Eis o resultado do validador.

Parser XML: Nenhum erro encontrado

Tipo de Mensagem: Documento de NF-e
Schema
 The 'http://www.portalfiscal.inf.br/nfe:nNF' element is invalid - The value '001' is invalid according to its datatype 'http://www.portalfiscal.inf.br/nfe:TNF' - The Pattern constraint failed.
Caminho: NFe[1]/infNFe/ide/nNF
 The 'http://www.portalfiscal.inf.br/nfe:qrCode' element is invalid - The value '' is invalid according to its datatype 'String' - The Pattern constraint failed.
Caminho: NFe[1]/infNFeSupl/qrCode/
 The element 'X509Data' in namespace 'http://www.w3.org/2000/09/xmldsig#' has invalid child element 'X509Certificate' in namespace 'http://www.w3.org/2000/09/xmldsig#'.
Caminho: NFe[1]/Signature/KeyInfo/X509Data/X509Certificate/

O item nNF é trivial e já consertei.

Sobre o QrCode, este é o conteúdo do XML:

<infNFeSupl>
<qrCode>
<![CDATA[ http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode?chNFe=33171020915987000181650010000000021339734346&nVersao=100&tpAmb=2&cDest=05268499750&dhEmi=323031372d31302d30365431383a33323a35322d30333a3030&vNF=117.00&vICMS=0.00&digVal=5138465568304b53726f5a46614632345131354764457063786d733d&cIdToken=000001&cHashQRCode=CB21E3F0A91955CF4BEAAFEE32653BDE005774FA ]]></qrCode>
</infNFeSupl>

@juniortada
Copy link
Member

O número da NF está errado, o qrcode está "em branco" e a sua assinatura está duplicada.
Por partes:
Numero vc passa "1", "11" ou "111" e nunca "00X".
Qr coloca:
Depois da linha: xml_com_qrcode = SerializacaoQrcode().gerar_qrcode(token, csc, xml, return_qr=True)
print(xml_com_qrcode[1])

envio

con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
envio = con.autorizacao(modelo='nfce', nota_fiscal=xml_com_qrcode[0])
Assinatura muda para o método novo com singxml ou corrige na exportação (olhe as issues fechadas)
mas recomendo instalar o singxml e assinar assim:
from pynfe.processamento.assinatura import AssinaturaA1SignXML

assinatura

a1 = AssinaturaA1SignXML(certificado, senha)
xml = a1.assinar(nfe)

@rodovalho
Copy link
Author

Tudo resolvido.

Muito obrigado pela excelente lib e pelo grande suporte.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants