Substituição¶
Substituir uma NFSe significa cancelar a nota original e emitir uma nova DPS com os dados corrigidos.
Exemplo¶
from datetime import datetime
from decimal import Decimal
from pynfse_nacional import DPS, Endereco, NFSeClient, Prestador, Servico, Tomador
client = NFSeClient(
cert_path="/caminho/para/certificado.pfx",
cert_password="senha",
ambiente="homologacao",
)
endereco = Endereco(
logradouro="Rua Exemplo",
numero="100",
bairro="Centro",
codigo_municipio=3550308,
uf="SP",
cep="01310100",
)
new_dps = DPS(
serie="900",
numero=2,
competencia="2026-01",
data_emissao=datetime.now(),
prestador=Prestador(
cnpj="11222333000181",
inscricao_municipal="12345",
razao_social="Empresa Exemplo LTDA",
endereco=endereco,
),
tomador=Tomador(
cpf="52998224725",
razao_social="Joao da Silva",
endereco=endereco,
),
servico=Servico(
codigo_lc116="04.03.01",
discriminacao="Descrição corrigida do serviço prestado",
valor_servicos=Decimal("500.00"),
),
)
response = client.substitute_nfse(
chave_acesso_original="12345678901234567890123456789012345678901234567890",
new_dps=new_dps,
motivo="Correção da descrição do serviço prestado",
codigo_motivo=99,
)
Regras¶
O motivo precisa ter entre 15 e 255 caracteres.
A substituição precisa acontecer dentro do prazo aceito pelo município.
Não dá para substituir NFSe sem tomador identificado.
Não dá para trocar o tomador por outra pessoa.
new_dpsnão deve carregar o camposubstituicao; a biblioteca adiciona isso.
Quando usar¶
Use substituição quando o problema for de conteúdo e a regra municipal permitir corrigir a nota por nova emissão em vez de cancelar manualmente.