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_emied_competsã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
| Valor | Descrição |
|---|---|
1 | Optante pelo Simples Nacional |
2 | Não optante pelo Simples Nacional |
Opções de reg_esp_trib
| Valor | Descrição |
|---|---|
0 | Sem regime especial |
1 | MEI - Microempreendedor Individual |
2 | Estimativa |
3 | Sociedade de Profissionais |
4 | Cooperativa |
5 | Microempresa (ME) |
6 | Empresa 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/2003BB: Subitem da LC 116/2003CC: Desdobro nacional
| Código | Descrição |
|---|---|
010101 | Análise e desenvolvimento de sistemas |
010201 | Programação |
010301 | Processamento de dados |
010401 | Elaboração de programas de computador |
010501 | Licenciamento de programas de computador |
010601 | Assessoria e consultoria em informática |
010701 | Suporte técnico em informática |
010801 | Planejamento, confecção, manutenção e atualização de páginas |
170101 | Assessoria ou consultoria de qualquer natureza |
171901 | Contabilidade, 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
| Valor | Descrição |
|---|---|
1 | ISSQN exigível |
2 | ISSQN não incidente |
3 | ISSQN imune |
4 | ISSQN com exigibilidade suspensa por decisão judicial |
5 | ISSQN com exigibilidade suspensa por procedimento administrativo |
6 | ISSQN retido |
Opções de tp_ret_issqn
| Valor | Descrição |
|---|---|
1 | Não retido |
2 | Retido pelo Tomador |
3 | Retido 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
- Troubleshooting - Resolução de erros comuns
- Consultas - Consultar NFS-e e parâmetros municipais
- Eventos - Cancelamento e substituição de NFS-e