PyNFe icon indicating copy to clipboard operation
PyNFe copied to clipboard

Nova regra NFCe em Góias

Open SrLucca opened this issue 4 months ago • 0 comments

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", }

SrLucca avatar Sep 03 '25 18:09 SrLucca