Skip to content

Nova regra NFCe em Góias #431

@SrLucca

Description

@SrLucca

Agora em goias existe novas urls para QrCode e Url Chave

Resolvi deixando assim no meu pynfe/processamento/serializacao.py
`
class SerializacaoQrcode(object):
"""Classe que gera e serializa o qrcode de NFC-e no xml"""

def gerar_qrcode(self, token, csc, xml, return_qr=False, online=True):
    """Classe para gerar url do qrcode da NFC-e"""
    # Procura atributos no xml
    ns = {"ns": NAMESPACE_NFE}
    sig = {"sig": NAMESPACE_SIG}
    # Tag Raiz NFe Ex: <NFe>
    nfe = xml
    chave = nfe[0].attrib["Id"].replace("NFe", "")
    data = nfe.xpath("ns:infNFe/ns:ide/ns:dhEmi/text()", namespaces=ns)[0].encode()
    tpamb = nfe.xpath("ns:infNFe/ns:ide/ns:tpAmb/text()", namespaces=ns)[0]
    cuf = nfe.xpath("ns:infNFe/ns:ide/ns:cUF/text()", namespaces=ns)[0]
    uf = [key for key, value in CODIGOS_ESTADOS.items() if value == cuf][0].upper()

    # tenta encontrar a tag cpf
    try:
        cpf = nfe.xpath("ns:infNFe/ns:dest/ns:CPF/text()", namespaces=ns)[0]
    except IndexError:
        # em caso de erro tenta procurar a tag cnpj
        try:
            cpf = nfe.xpath("ns:infNFe/ns:dest/ns:CNPJ/text()", namespaces=ns)[0]
        except IndexError:
            cpf = None  # noqa: F841
    total = nfe.xpath("ns:infNFe/ns:total/ns:ICMSTot/ns:vNF/text()", namespaces=ns)[0]
    # icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0]
    digest = nfe.xpath(
        "sig:Signature/sig:SignedInfo/sig:Reference/sig:DigestValue/text()",
        namespaces=sig,
    )[0].encode()

    lista_dia = re.findall(r"-\d{2}", str(data))
    dia = str(lista_dia[1])
    dia = dia[1:]
    replacements = {"0": ""}
    token = re.sub("([0])", lambda m: replacements[m.group()], token)

    # VERSAO_QRCODE =2
    if online:
        # versão online
        url = "{}|{}|{}|{}".format(chave, VERSAO_QRCODE, tpamb, token)
    else:
        # versão offline
        digest = digest.hex()

        url = "{}|{}|{}|{}|{}|{}|{}".format(
            chave, VERSAO_QRCODE, tpamb, dia, total, digest, token
        )

    url_complementar = url + csc
    url_hash = hashlib.sha1(url_complementar.encode()).digest()
    url_hash = base64.b16encode(url_hash).decode()

    url = "p={}|{}".format(url, url_hash)

    # url_chave -Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e.
    # Informar a URL da “Consulta por chave de acesso da NFC-e”.
    # A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso
    lista_uf_padrao = ["PR", "CE", "RS", "RJ", "RO", "DF"]
    if uf in lista_uf_padrao:
        qrcode = NFCE[uf]["QR"] + url
        url_chave = NFCE[uf]["URL"]
    elif uf == "SP":
        if tpamb == "1":
            qrcode = NFCE[uf]["HTTPS"] + "www." + NFCE[uf]["QR"] + url
            url_chave = NFCE[uf]["HTTPS"] + "www." + NFCE[uf]["URL"]
        else:
            qrcode = NFCE[uf]["HTTPS"] + "www.homologacao." + NFCE[uf]["QR"] + url
            url_chave = NFCE[uf]["HTTPS"] + "www.homologacao." + NFCE[uf]["URL"]
    # BA tem comportamento distindo para qrcode e url
    elif uf == "BA":
        if tpamb == "1":
            qrcode = NFCE[uf]["HTTPS"] + NFCE[uf]["QR"] + url
        else:
            qrcode = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["QR"] + url
        url_chave = url_chave = NFCE[uf]["URL"]
    # MG tem comportamento distindos qrcode e url
    elif uf == "MG":
        qrcode = NFCE[uf]["QR"] + url
        if tpamb == "1":
            url_chave = NFCE[uf]["HTTPS"] + NFCE[uf]["URL"]
        else:
            url_chave = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["URL"]
    elif uf == "GO": #Nova regra para goias
        qrcode = "https://nfeweb." + NFCE[uf]["QR"] + url
        url_chave = "http://www." + NFCE[uf]["URL"]
    # AC, AM, RR, PA,
    else:
        if tpamb == "1":
            qrcode = NFCE[uf]["HTTPS"] + NFCE[uf]["QR"] + url
            url_chave = NFCE[uf]["HTTPS"] + NFCE[uf]["URL"]
        else:
            qrcode = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["QR"] + url
            url_chave = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["URL"]
    # adicionta tag infNFeSupl com qrcode
    info = etree.Element("infNFeSupl")
    if uf == "GO": #Nova regra para goias
        etree.SubElement(info, "qrCode").text = qrcode.strip()
    else:
        etree.SubElement(info, "qrCode").text = etree.CDATA(qrcode.strip())
    etree.SubElement(info, "urlChave").text = url_chave

    nfe.insert(1, info)

    # retorna nfe com o qrcode incluido NT2015/002 e qrcode
    if return_qr:
        return nfe, qrcode.strip()
    # retorna apenas nfe com o qrcode incluido NT2015/002
    else:
        return nfe

`

e assim no meu pynfe/utils/webservices.py

"GO": { "STATUS": "sefaz.go.gov.br/nfe/services/NFeStatusServico4?wsdl", "AUTORIZACAO": "sefaz.go.gov.br/nfe/services/NFeAutorizacao4?wsdl", "RECIBO": "sefaz.go.gov.br/nfe/services/NFeRetAutorizacao4?wsdl", "CHAVE": "sefaz.go.gov.br/nfe/services/NFeConsultaProtocolo4?wsdl", "INUTILIZACAO": "sefaz.go.gov.br/nfe/services/NFeInutilizacao4?wsdl", "EVENTOS": "sefaz.go.gov.br/nfe/services/NFeRecepcaoEvento4?wsdl", "QR": "sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe?", "CADASTRO": "sefaz.go.gov.br/nfe/services/CadConsultaCadastro4?wsdl", "HTTPS": "https://nfe.", "HOMOLOGACAO": "https://homolog.", "URL": "sefaz.go.gov.br/nfce/consulta", }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions