Skip to main content

Emissão de NFS-e

Tutorial completo para emissão de Nota Fiscal de Serviço Eletrônica através do Sistema Nacional NFS-e (ADN).

Visão Geral

A emissão de NFS-e no padrão nacional é feita através da ação post_nfse, que recebe uma DPS (Declaração de Prestação de Serviços) e retorna a NFS-e gerada.

Estrutura Básica

from abstra.connectors import run_connection_action

params = {
"inf_dps": {
"ver_aplic": "MINHAAPP1.0",
"serie": "1",
"n_dps": "1",
"tp_emit": "1",
"c_loc_emi": "3304557", # Código IBGE do município
"prest": {
# Dados do prestador
},
"toma": {
# Dados do tomador
},
"serv": {
# Dados do serviço
},
"valores": {
# Valores e tributação
}
}
}

result = run_connection_action("adn-nfse", "post_nfse", params)

Importante: Os campos id, tp_amb, versao, dh_emi e d_compet são computados automaticamente pelo conector.

Dados do Prestador

"prest": {
"cnpj": "12345678000199", # CNPJ do prestador (14 dígitos)
"reg_trib": {
"op_simp_nac": "1", # 1 = Optante pelo Simples Nacional
"reg_esp_trib": "0" # 0 = Sem regime especial
}
}

Opções de op_simp_nac

ValorDescrição
1Optante pelo Simples Nacional
2Não optante pelo Simples Nacional

Opções de reg_esp_trib

ValorDescrição
0Sem regime especial
1MEI - Microempreendedor Individual
2Estimativa
3Sociedade de Profissionais
4Cooperativa
5Microempresa (ME)
6Empresa de Pequeno Porte (EPP)

Dados do Tomador

"toma": {
"cnpj": "98765432000188", # CNPJ (14 dígitos) ou...
# "cpf": "12345678901", # CPF (11 dígitos)
"x_nome": "Empresa Tomadora Ltda"
}

Tomador Pessoa Jurídica com Endereço

"toma": {
"cnpj": "98765432000188",
"x_nome": "Empresa Tomadora Ltda",
"end": {
"end_nac": {
"c_mun": "3550308",
"cep": "01310100",
"x_lgr": "Avenida Paulista",
"nro": "1000",
"x_cpl": "Sala 101",
"x_bairro": "Bela Vista",
"uf": "SP"
}
},
"fone": "1199999999",
"email": "contato@empresa.com.br"
}

Dados do Serviço

"serv": {
"loc_prest": {
"c_loc_prestacao": "3304557" # Código IBGE do local de prestação
},
"c_serv": {
"c_trib_nac": "010101", # Código de tributação nacional (6 dígitos)
"c_nbs": "115011000", # Código NBS (9 dígitos)
"x_desc_serv": "Consultoria em tecnologia da informação"
}
}

Códigos de Tributação Nacional (cTribNac)

Os códigos seguem o formato AABBCC:

  • AA: Item da LC 116/2003
  • BB: Subitem da LC 116/2003
  • CC: Desdobro nacional
CódigoDescrição
010101Análise e desenvolvimento de sistemas
010201Programação
010301Processamento de dados
010401Elaboração de programas de computador
010501Licenciamento de programas de computador
010601Assessoria e consultoria em informática
010701Suporte técnico em informática
010801Planejamento, confecção, manutenção e atualização de páginas
170101Assessoria ou consultoria de qualquer natureza
171901Contabilidade, escrituração e serviços técnicos

Consulte a lista completa de códigos.

Valores e Tributação

"valores": {
"v_serv_prest": {
"v_serv": "1000.00" # Valor do serviço
},
"trib": {
"trib_mun": {
"trib_issqn": "1", # 1 = ISSQN exigível
"tp_ret_issqn": "1" # 1 = Não retido
},
"tot_trib": {
"ind_tot_trib": "0" # 0 = Não informado
}
}
}

Opções de trib_issqn

ValorDescrição
1ISSQN exigível
2ISSQN não incidente
3ISSQN imune
4ISSQN com exigibilidade suspensa por decisão judicial
5ISSQN com exigibilidade suspensa por procedimento administrativo
6ISSQN retido

Opções de tp_ret_issqn

ValorDescrição
1Não retido
2Retido pelo Tomador
3Retido pelo Intermediário

Exemplo Completo: Consultoria em TI

from abstra.connectors import run_connection_action

def emitir_nfse_consultoria(
cnpj_prestador: str,
cnpj_tomador: str,
nome_tomador: str,
valor: float,
descricao: str,
codigo_municipio: str = "3304557",
numero_dps: int = 1
):
"""
Emite NFS-e para serviço de consultoria em TI.
"""
params = {
"inf_dps": {
"ver_aplic": "MINHAAPP1.0",
"serie": "1",
"n_dps": str(numero_dps),
"tp_emit": "1",
"c_loc_emi": codigo_municipio,
"prest": {
"cnpj": cnpj_prestador,
"reg_trib": {
"op_simp_nac": "1",
"reg_esp_trib": "0"
}
},
"toma": {
"cnpj": cnpj_tomador,
"x_nome": nome_tomador
},
"serv": {
"loc_prest": {
"c_loc_prestacao": codigo_municipio
},
"c_serv": {
"c_trib_nac": "010601", # Consultoria em informática
"c_nbs": "115011000",
"x_desc_serv": descricao
}
},
"valores": {
"v_serv_prest": {
"v_serv": f"{valor:.2f}"
},
"trib": {
"trib_mun": {
"trib_issqn": "1",
"tp_ret_issqn": "1"
},
"tot_trib": {
"ind_tot_trib": "0"
}
}
}
}
}

return run_connection_action("adn-nfse", "post_nfse", params)


# Uso
result = emitir_nfse_consultoria(
cnpj_prestador="12345678000199",
cnpj_tomador="98765432000188",
nome_tomador="Cliente Exemplo Ltda",
valor=5000.00,
descricao="Consultoria em arquitetura de sistemas - Período: Dezembro/2025"
)

if result.get("status") == "success":
data = result["data"]
print(f"NFS-e emitida com sucesso!")
print(f"Chave de acesso: {data.get('chave_acesso')}")
else:
print(f"Erro: {result.get('message')}")

Processando a Resposta

Resposta de Sucesso

{
"status": "success",
"data": {
"tipo_ambiente": 2,
"versao_aplicativo": "SefinNac_Pre_1.4.0",
"data_hora_processamento": "2025-12-11T12:00:00-03:00",
"id_dps": "DPS330455723740545800013000001000000000000001",
"chave_acesso": "33251212345678000199550010000000011234567890",
"nfse_xml_g_zip_b64": "H4sIAAAAAAAA...", # XML comprimido
"nfse_xml": "<NFSe>...</NFSe>", # XML descomprimido
"nfse": {
# Dados da NFS-e em formato JSON
}
}
}

Resposta de Erro

{
"status": "error",
"message": "HTTP 400: {\"tipoAmbiente\":2,...,\"erros\":[{\"Codigo\":\"E0312\",\"Descricao\":\"...\"}]}"
}

Consultando NFS-e Emitida

Após a emissão, você pode consultar a NFS-e pela chave de acesso:

result = run_connection_action(
"adn-nfse",
"get_nfse_by_chave_acesso",
{"chaveAcesso": "33251212345678000199550010000000011234567890"}
)

Próximos Passos