O componente NFS-e 2.0 é a evolução do componente NFS-e da TecnoSpeed que contém uma biblioteca contendo todos os métodos necessários para emitir a Nota Fiscal de Serviço eletrônica.
Nesta nova versão do componente, todos os fluxos de emissão, envio síncrono, assíncrono, consultas, por RPS, por Nota, tudo isso foi simplificado e unificado em métodos onde não há necessidade de saber ou fazer tratamentos para identificar qual método utilizar. O componente faz isso pra você.
Em situações nas quais a prefeitura muda o seu fornecedor de software, após a re-homologação deste município, havia a necessidade de recompilar o projeto e atualizar tanto o componente quanto o seu produto no cliente final. Agora, com o componente NFS-e 2.0 somente é necessário chamar o método de atualização das regras daquele município e, após isso, seu cliente pode continuar a emissão sem problemas.
É a escolha ideal para quem pode consumir OCX e prefere manter todo o processo de mensageria da NFS-e dentro do próprio ambiente. Para utilizar o componente em seu software, basta instanciá-lo em seu projeto, implementar chamadas para cada um dos métodos e configurá-los de acordo com sua necessidade.
Neste artigo você terá todas as informações para conseguir fazer o download da nova versão do componente e implementar todos os novos métodos para emitir e imprimir uma nota fiscal de serviço de forma absurdamente simples seguindo os seguintes passos.
- Instalando o componente NFSe 2.0
- Configurando as propriedades NFSe 2.0
- AtualizarArquivos
- Consultar Cidades Homologadas
- Consultar Notas Tomadas
- Entendendo o fluxo ideal de emissão da NFSe 2.0
- Gerando o arquivo de integração
- Enviar
- Consultar
- Cancelar
- Exportar para PDF
- Imprimir
- Visualizar Nota
- Visualizar vencimento do Certificado
- Substituir
- Converter XML para JSON
- Enviar Email
Instalando o Componente NFSe 2.0
Primeiramente, se você não possuí um Token de acesso é necessário realizar um cadastro no TecnoAccount da TecnoSpeed TI no link: https://conta.tecnospeed.com.br/
Caso você já possua um cadastro no TecnoAccount e um token, você irá utilizar este mesmo token, não sendo necessário um novo cadastro.
Clique em Criar uma conta e preencha os dados do formulário
Com a conta criada faça o login e pegue o seu Token
Esse Token será utilizado no método ConfigurarSoftwareHouse do componente, a baixo veremos como usar.
Se preparando para começar
Além do Componente NFS-e, você também precisará de um CNPJ com Inscrição Municipal, um certificado digital deste CNPJ e/ou os dados de autenticação do CNPJ do portal da prefeitura, dependendo do município. Com isso reunido, você poderá seguir este passo a passo detalhado:
Realizando o download
Download pelo portal do cliente
Após aprovação do pedido de adesão, em até 24 horas úteis, nossa equipe financeira irá realizar o faturamento e disponibilizar o Componente NFS-e para download na Central do Cliente. Você pode acessar a Central do Cliente com os dados de acesso que você preencheu no formulário de registro.
Com o componente já disponível, na aba lateral Download, clique no botão Baixar. Caso o download não inicie, desabilite o bloqueador de pop-ups do seu navegador.
Download como versão Trial
Para fazer o download da versão Trial, é necessário acessar os repositórios da TecnoSpeed no GITHub através do link a baixo, e fazer o download de uma release com o v2 na descrição, como na imagem a seguir.
Existem dois instaladores disponíveis para download na Central do Cliente: O Setup NFSe Full e o Setup NFSe Dependencias. O primeiro deve ser instalado no ambiente de desenvolvimento e o segundo no ambiente onde o sistema for ser executado.
No ambiente de desenvolvimento
No ambiente de desenvolvimento, nós devemos instalar a versão Full, pois ela é a biblioteca completa, com todos os métodos e arquivos que o componente possui. Para instalá-la, basta executar o instalador e seguir as instruções na tela.
No ambiente do cliente
No ambiente onde o sistema for ser executado, devemos instalar a versão Dependencias, que é a versão Full reduzida, com apenas as DLLs necessárias para o componente funcionar. Para instalá-la, existem algumas opções: é possível simplesmente executar o instalador, como na versão Full, executar o instalador em modo silencioso, ou incluir as DLLs no seu próprio instalador.
Além das DLLs, é necessário que o componente tenha acesso às pastas de Esquemas, Templates, Scripts, aos arquivos com o endereço dos servidores e ao nfseLocais. Estas pastas e arquivos são criados no diretório de instalação da versão Full (TecnoSpeed/NFSe/Arquivos). É necessário colocá-los no ambiente do cliente e configurar apenas uma única propriedade chamada "Arquivos".
Executando o instalador
Esta é a forma padrão de instalação. Basta executar o instalador e seguir as instruções na tela.
Executando o instalador em modo silencioso
Para evitar que o usuário precise realizar alguma interação, é possível incorporar um comando na sua aplicação ou instalador. Existem dois comandos disponíveis: Silent e VerySilent. O comando Silent irá exibir a interface de instalação, mas não permitirá que o usuário interaja com o instalador. Por outro lado, o comando VerySilent não exibirá nenhuma interface ao usuário, a instalação será executada em segundo plano.
Incluindo os arquivos no próprio instalador
O instalador das dependências apenas adiciona as DLLs onde ele é instalado. Para não utilizar o instalador, é possível incorporar as DLLs ao próprio instalador. Basta copiar ou registrar na pasta System32 ou SysWOW64 , caso o sistema seja 64 bits, e na pasta SysWOW64 para a versão de 32 bits do Windows.
DLLs que devem ser registradas:
- NFSeX.dll
- NFSeDataSetX.dll
- NFSeRESTX.dll
- NFSeSignerX.dll
- NFSeConverterX.ocx
- msxml6.dll
- midas.dll
- stdvcl40.dll
DLLs que devem ser apenas copiadas:
- ssleay32.dll
- libeay32.dll
- msxml6r.dll
- NFSeImpressaoRBUnicode.dll (Delphi XE ou superior)
- NFSeImpressaoRB.dll (Delphi inferior ou XE ou outras linguagens de programação)
Configurando as propriedades NFSe 2.0
As configurações do Componente NFSe podem ser configuradas utilizando um arquivo de configuração (.ini) ou através do código fonte.
Cada propriedade indica uma configuração. Por exemplo, a propriedade "Ambiente" determina para qual servidor o Componente irá enviar a nota (o de homologação ou de produção). Estas configurações estão divididas em dois tipos: as propriedades gerais do componente e as propriedades de e-mail.
Configurando pelo código fonte
É possível preencher as propriedades através do código fonte do sistema. Basta informar os valores desejados para cada uma delas. Você encontra uma lista completa de funções e exemplos de preenchimento das propriedades na seção propriedades do componente.
var
NFSe : TspdNFSe;
begin
NFSe := TspdNFSe.Create(nil);
NFSe.ConfigurarSoftwareHouse('CNPJ da Software House','Token gerado em TecnoAccount');
Exemplo do preenchimento de propriedades pelo código fonte:
Configurando pelo arquivo .ini
Também é possível preencher as propriedades através de um arquivo de configuração (.ini). Basta informar os valores desejados para cada uma delas e passar o diretório deste arquivo como parâmetro no método LoadConfig. Você encontra uma lista completa de funções e exemplos de preenchimento das propriedades na seção propriedades do componente.
Mesmo configurando o componente pelo arquivo .ini, o método configurarSoftwareHouse sempre deverá ser configurado após instanciar o componente da forma demonstrada abaixo.
var
NFSe : TspdNFSe;
begin
NFSe := TspdNFSe.Create(nil);
NFSe.ConfigurarSoftwareHouse('CNPJ da Software House','Token gerado em TecnoAccount');
NFSe.LoadConfig();
[NFSE] CIDADE=CIDADEUF Arquivos=C:\Program Files\TecnoSpeed\NFSe\Arquivos DiretorioLog=Log\ [MAIL] |
Atualizar Arquivos
O método AtualizarArquivos tem a funcionalidade de atualizar os arquivos referentes ao município em que o componente NFSe está configurado, que são eles: templates, esquemas, scripts, nfseLocais.ini layout de impressão e brasões.
Esses arquivos são cruciais para o funcionamento do componente, com esse método é possível mudar o padrão em que a cidade está homologado apenas chamando o método AtualizarArquivos, sem que seja necessário atualizar a versão do componente NFSe. (Para cidades onde o novo padrão já está implementado na versão utilizada).
É possível configurar a propriedade ModoAtualizarArquivos para que os arquivos de todas cidades/padrões sejam atualizados. Isso elimina a necessidade de executar o método AtualizarArquivos cada vez que uma nova cidade é configurada.
Boas práticas para uma utilização efetiva do AtualizarArquivos:
- Não é recomendada a utilização de outros métodos durante a execução do AtualizarArquivos, pois este método remove e substitui rapidamente arquivos de configurações do componente que são cruciais para execução de outros métodos, se durante a execução do AtualizarArquivos, outro método for chamado, podem ocorrer exceptions de arquivos não encontrados.
-
Não implementar este método vinculado ao fluxo de emissão de notas, pois o download de arquivos pode levar alguns segundos para ser feito de acordo com vários fatores, como internet e permissões de firewall do servidor onde o componente é utilizado.
-
Executá-lo em uma rotina automatizada que o chama apenas uma vez ao dia ou semana em horários sem emissão.
-
Criar um controle para que outros métodos não sejam chamados durante a execução do AtualizarArquivos, principalmente em sistemas com várias instâncias, pois em uma única instância, o sistema geralmente fica bloqueado durante a execução do método e não há concorrência.
-
Implementar o método separadamente, para que o método também possa ser chamado em casos mais críticos onde uma prefeitura teve alguma mudança repentina que impactou na emissão das notas (exemplo, uma cidade com grande volume de emissão, como São Paulo, passou a retornar o XML da NFS-e com layout de XML e os arquivos precisam ser atualizados para que os novos templates sejam baixados e as emissões retornem ao normal).
Exemplos:
begin
NFSe.AtualizarArquivos;
...
end;
Delphi
C#
Visual Basic 6
PHP
Consultar Cidades Homologadas
O método ConsultarCidadesHomologadas retorna um XML contendo as informações sobre as cidades homologadas pela TecnoSpeed até o momento, nesse XML existem informações como:
- Qual o Padrão (fornecedor do WebService), Exemplo: Betha, Ginfes, ISSDigital, etc...
- Consulta de notas Tomadas ou Destinadas
- Tipo de comunicação (Soap ou Rest)
- Código IBGE do município
- Multi Serviços, Se a cidade possuí inclusão de mais de 1 serviço por RPS.
- Certificado Digital, se é necessário para assinar o XML de envio
- Autenticação com o portal é feita por Login e Senha
Exemplo do XML:
<MARINGAPR>
<Padrao>MARINGA</Padrao>
<ConsultarNotasTomada>True</ConsultarNotasTomada>
<TipoComunicacao>Soap</TipoComunicacao>
<CodigoIBGE>4115200</CodigoIBGE>
<Multiservicos>False</Multiservicos>
<Certificado>True</Certificado>
<Login>False</Login>
<Senha>False</Senha>
</MARINGAPR>
Esse método é muito útil caso você queira saber algumas informações importantes sobre o município que desejar sem que seja preciso entrar em contato com a consultoria técnica da TecnoSpeed.
Exemplo:
var
_xml : String;
begin
_xml := NFSe.ConsultarCidadesHomologadas;
...
end;
Consultar Notas Tomadas
Consulta todas as notas tomadas / Recebidas contra o tomador do serviço em um determinado período para uma cidade especifica.
Exemplo:
Parâmetros
Argumento | Tipo | Detalhes |
aNomeCidade | String | Nome da cidade onde a nota foi emitida sem espaços. |
aDocumentoTomador | String | Cpf ou CNPJ do tomador do serviço. |
aIMTomador | String | Inscrição municipal do tomador caso houver. |
aDocumentoPrestadorConsulente | String | CNPJ do prestador do serviço ou Consulente. |
aIMPrestadorConsulente | String | Inscrição municipal do prestador ou Consulente caso houver. |
aDataInicial | String | Data inicial para formar o período em que as notas foram emitidas. (YYYY-MM-DD) |
ADataFinal | String | Data final para formar o período em que as notas foram emitidas. (YYYY-MM-DD) |
aPagina | String | Quando existem muitos registros naquele período informado é necessário paginar para trazer todos os registros. |
aParams | String | Usado para informar os parâmetros extras, exemplo: Login=xxxxx;Senha=xxxxxxxxx |
Retorno
Retorno na própria instância da NFSe que chamou o método ConsultarNotasTomadas, Exemplo:
NFSe.RetornoWSNotasTomadas.Items[0..N].Status;
NFSe.RetornoWSNotasTomadas.Items[0..N].CNPJ;
NFSe.RetornoWSNotasTomadas.Items[0..N].InscricaoMunicipal;
NFSe.RetornoWSNotasTomadas.Items[0..N].SerieRps;
NFSe.RetornoWSNotasTomadas.Items[0..N].NumeroRps;
NFSe.RetornoWSNotasTomadas.Items[0..N].NumeroNFSe;
NFSe.RetornoWSNotasTomadas.Items[0..N].DataEmissaoNFSe;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodVerificacao;
NFSe.RetornoWSNotasTomadas.Items[0..N].Situacao;
NFSe.RetornoWSNotasTomadas.Items[0..N].DataCancelamento;
NFSe.RetornoWSNotasTomadas.Items[0..N].ChaveCancelamento;
NFSe.RetornoWSNotasTomadas.Items[0..N].Tipo;
NFSe.RetornoWSNotasTomadas.Items[0..N].Motivo;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorServicos;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorDeducoes;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorPis;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorCofins;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorInss;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorIr;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorCsll;
NFSe.RetornoWSNotasTomadas.Items[0..N].AliquotaIss;
NFSe.RetornoWSNotasTomadas.Items[0..N].ValorIss;
NFSe.RetornoWSNotasTomadas.Items[0..N].IssRetido;
NFSe.RetornoWSNotasTomadas.Items[0..N].DataAutorizacao;
NFSe.RetornoWSNotasTomadas.Items[0..N].RazaoSocialPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].EnderecoPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].NumeroPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].ComplementoPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].BairroPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodigoCidadePrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].CepPrestador;
NFSe.RetornoWSNotasTomadas.Items[0..N].CpfCnpjTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].InscMunicipalTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].RazaoSocialTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].EnderecoTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].NumeroTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].ComplementoTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].BairroTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodigoCidadeTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].CepTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].EmailTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].TelefoneTomador;
NFSe.RetornoWSNotasTomadas.Items[0..N].ItemListaServico;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodigoCNAE;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodTributacaoMunicipio;
NFSe.RetornoWSNotasTomadas.Items[0..N].CodigoCidadePrestacao;
NFSe.RetornoWSNotasTomadas.Items[0..N].DiscriminacaoServico;
NFSe.RetornoWSNotasTomadas.Items[0..N].Xml;
NFSe.RetornoWSNotasTomadas.NextPage;
NFSe.RetornoJsonTomadas;
NFSe.RetornoCSVTomadas;
Na mesma instância da NFSe contém uma função RetornoJsonTomadas que possui um Json de retorno da comunicação.
Exemplo:
{
"resposta":{
"totalDeNotas":50,
"nextPage":True,
"notas":[
{
"prestador":{
"endereco":{
"endereco":"AVENIDA TESTE",
"numero":"473",
"complemento":"",
"bairro":"Zona 08",
"codigoCidade":"4115200",
"cep":"87013180"
},
"razaoSocial":"TESTE TESTE",
"cpfCnpj":"99999999999999",
"inscricaoMunicipal":"9999"
},
"tomador":{
"endereco":{
"endereco":"Avenida Duque De Caxias",
"numero":"882",
"complemento":"SALA 1708 TORRE II",
"bairro":"Novo Centro",
"codigoCidade":"4115200",
"cep":"87020025"
},
"razaoSocial":"TecnoSpeed S.A.",
"cpfCnpj":"08187168000160",
"inscricaoMunicipal":"",
"email":"comercial@tecnospeed.com.br",
"telefone":"4430379500"
},
"rps":{
"serie":"9999",
"numero":"999999",
"tipo":"1",
"dataEmissao":"2019-01-23T06:38:10"
},
"nfse":{
"numero":"999999",
"dataAutorizacao":"2019-01-23",
"codigoVerificacao":"3A3094B1D",
"dataCancelamento":"",
"ChaveCancelamento":"99999|9999_99999_SRC00_1"
},
"iss":{
"aliquota":"3",
"retido":"2",
"valor":"4.91",
"itemListaServico":"1601",
"codigoCNAE":"4921301",
"codigoCidadePrestacao":"4115200"
},
"retencao":{
"pis":"0.00",
"cofins":"0.00",
"inss":"0.00",
"ir":"0.00",
"csll":"0.00"
},
"situacao":"AUTORIZADA",
"status":"SUCESSO",
"motivo":"",
"discriminacaoServico":"Produto: VT Urbano - Qtd: 42 - Vlr. Unitario: R$ 3,90",
"codigoTributacaoMunicipio":"15357",
"valorServicos":"163.8",
"valorDeducoes":"0.00",
"xml":"Xml da NFSe"
}
]
}
}
Ainda na mesma instância da NFSe contém uma função RetornoCSVTomadas que possui um CSV de retorno da comunicação.
Exemplo:
SUCESSO;;99999999999999;;1;000;000;2020-07-10T00:00:00;2020-07-10T00:00:00;0000000;AUTORIZADA;;000;<ComplNfse><Nfse><InfNfse><Numero>000</Numero><CodigoVerificacao>0000000</CodigoVerificacao><DataEmissao>2020-07-10T20:20:13.830-03:00</DataEmissao><IdentificacaoRps><Numero>000</Numero><Serie>0</Serie><Tipo>0</Tipo></IdentificacaoRps><DataEmissaoRps>2020-07-10</DataEmissaoRps><NaturezaOperacao>1</NaturezaOperacao><OptanteSimplesNacional>2</OptanteSimplesNacional><Competencia>2020-07-01</Competencia><OutrasInformacoes>nota teste</OutrasInformacoes><Servico><Valores><ValorServicos>1.00</ValorServicos><ValorDeducoes>0</ValorDeducoes><ValorIr>0.10</ValorIr><IssRetido>2</IssRetido><ValorIss>0.10</ValorIss><BaseCalculo>1.00</BaseCalculo><Aliquota>3</Aliquota><ValorLiquidoNfse>1.00</ValorLiquidoNfse><DescontoCondicionado>0</DescontoCondicionado><DescontoIncondicionado>0</DescontoIncondicionado></Valores><ItemListaServico>1010</ItemListaServico><CodigoCnae>0000000</CodigoCnae><Discriminacao>nota de teste</Discriminacao><CodigoMunicipio>0000000</CodigoMunicipio></Servico><PrestadorServico><IdentificacaoPrestador><Cnpj>99999999999999</Cnpj><InscricaoMunicipal>1111</InscricaoMunicipal></IdentificacaoPrestador><RazaoSocial>TecnoSpeed S.A.</RazaoSocial><NomeFantasia>S.A.</NomeFantasia><Endereco><Endereco>AV XV DE NOVEMBRO</Endereco><Numero>1</Numero><Bairro>CENTRO</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Email>comercial@tecnospeed.com.br</Email></Contato></PrestadorServico><TomadorServico><IdentificacaoTomador><CpfCnpj><Cnpj>99999999999999</Cnpj></CpfCnpj></IdentificacaoTomador><RazaoSocial>TESTE TESTE</RazaoSocial><Endereco><Endereco>CAMPOS BICUDO</Endereco><Numero>00</Numero><Complemento/><Bairro>Zona 7</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Telefone>999999999</Telefone><Email>comercial@tecnospeed.com.br</Email></Contato></TomadorServico><IntermediarioServico/><OrgaoGerador><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf></OrgaoGerador><ConstrucaoCivil/></InfNfse></Nfse></ComplNfse>;1;
Delphi
NFSe.ConsultarNotasTomadas('NomeDaCidade', 'Documento do tomador', 'Inscrição Municipal do Tomador', 'Documento do prestador ou Consulente', 'Inscrição municipal do Prestador ou Consulente', 'Data inicial das emissão das notas', 'Data final da emissão das notas', 'Número da pagina para trazer os registros', 'Parâmetros extras, exemplo: Login=xxxxxx,Senha=xxxxxxx');
C#
retorno = NFSe.ConsultarNotasTomadas("NomeDaCidade", "Documento do tomador", "Inscrição Municipal do Tomador", "Documento do prestador ou Consulente", "Inscrição municipal do Prestador ou Consulente", "Data inicial das emissão das notas", "Data final da emissão das notas", "Número da pagina para trazer os registros", "Parâmetros extras, exemplo: Login=xxxxxx,Senha=xxxxxxx");
Visual Basic 6
retorno = NFSe.ConsultarNotasTomadas"NomeDaCidade", "Documento do tomador", "Inscrição Municipal do Tomador", "Documento do prestador ou Consulente", "Inscrição municipal do Prestador ou Consulente", "Data inicial das emissão das notas", "Data final da emissão das notas", "Número da pagina para trazer os registros", "Parâmetros extras, exemplo: Login=xxxxxx,Senha=xxxxxxx"
PHP
$retorno = $NFSe->ConsultarNotasTomadas("NomeDaCidade", "Documento do tomador", "Inscrição Municipal do Tomador", "Documento do prestador ou Consulente", "Inscrição municipal do Prestador ou Consulente", "Data inicial das emissão das notas", "Data final da emissão das notas", "Número da pagina para trazer os registros", "Parâmetros extras, exemplo: Login=xxxxxx,Senha=xxxxxxx");
É importante ressaltar que este método não está disponível para todos os padrões suportados pelo componente NFSe, é necessário consultar a documentação do padrão no link: https://atendimento.tecnospeed.com.br/hc/pt-br/sections/360001602793-Documenta%C3%A7%C3%A3o-t%C3%A9cnica para conferir se o padrão possuí suporte ou não para esse método. Esse método é utilizado para consultar as notas fiscais de serviços emitidas contra o tomador do serviço.
Entendendo o fluxo ideal de emissão da NFSe 2.0
Segue abaixo o fluxograma com a rotina de autorização de uma NFS-e:
Inicialmente, precisamos configurar o componente NFSe. Feito isso, podemos chamar o método Enviar informando o Tx2 como parâmetro do método, nessa estapa o componente se encarregara de gerar o xml, assinar e enviar de forma automática.
Feito o envia, precisamos verificar qual a situação do Lote através da propriedade instância da NFSe 2.0, Exemplo: NFSe.RetornoWS.Items[i].Status.
A partir desse momento, podem existir 3 possíveis casos de Status, são eles:
SUCESSO:
A nota foi autorizada no WebService da prefeitura e não é necessário realizar nenhuma consulta.
ERRO:
A nota foi Rejeitada pelo WebService da prefeitura, é necessário aplicar as correções descritas no parâmetro Motivo, Exemplo: NFSe.RetornoWS.Items[i].Motivo e chamar o método Enviar novamente.
EMPROCESSAMENTO:
A nota está em processamento e é necessário chamar o método de Consultar para obter a NFSe.
- Ao Consultar a nota, podemos ter 3 possíveis casos, são eles:
- SUCESSO, a nota foi Autorizada pelo WebService da Prefeitura.
- EMPROCESSAMENTO, é necessário realizar a consulta novamente pois a nota ainda não foi processada.
- ERRO, é necessário aplicar as correções descritas no parâmetro Motivo, Exemplo: NFSe.RetornoWS.Items[i].Motivo e chamar o método Enviar novamente.
No caso de envio via Upload, ao invés do retorno vir na propriedade NFSe.RetornoWS.Items[i], o componente irá gerar uma remessa do lote e retornar na própria chamada do método Enviar, Exemplo:
_minhaRemessa := NFSE.Enviar(aTx2);
Após a geração dessa remessa, será necessário salvá-la em um arquivo (como um txt por exemplo) e fazer o upload manualmente no portal da prefeitura do prestador.
Falaremos mais sobre o objeto "RetornoWS" nos próximos tópicos.
Gerando o arquivo de integração
Para gerar este arquivo de integração, é necessário preencher os campos relacionados ao Lote / RPS de acordo com as informações necessárias para a emissão da NFSe. Para informar estes dados, é necessário seguir a Documentação do Arquivo de Integração TX2 do padrão único.
Após gerar o arquivo de integração (Tx2), ele já pode ser submetido ao método Enviar.
Método Enviar (aTx2)
O método Enviar se encarrega de Gerar o Xml, assinar e enviar de forma automática.
Exemplo:
NFSe.Enviar(const aTx2 : String) : String;
Parâmetros
Argumento | Tipo | Detalhes |
aTx2 | String | Tx2 padrão único a ser enviado |
Retorno
- O retorno estará na propriedade RetornoWS do NFSe, Exemplo NFSe.RetornoWS.
- O NFSe.RetornoWS terá um contador de iterações podendo ter 1 ou muitas posições dependendo da quantidade de RPS enviados no tx2.
- NFSe.RetornoWS.Items[0..N]
- O NFSe.RetornoWS.Items[0..N] terá os seguintes campos de cada nota:
- NFSe.RetornoWS.Items[0..N]
- O NFSe.RetornoWS terá um contador de iterações podendo ter 1 ou muitas posições dependendo da quantidade de RPS enviados no tx2.
- A instância NFSe conta com duas funções de retorno, a função RetornoJson e RetornoCSV onde cada uma contém seus respectivos tipos de retorno.
NFSe.RetornoWS.Items[i].Status
NFSe.RetornoWS.Items[i].Protocolo
NFSe.RetornoWS.Items[i].CNPJ
NFSe.RetornoWS.Items[i].InscricaoMunicipal
NFSe.RetornoWS.Items[i].SerieRps
NFSe.RetornoWS.Items[i].NumeroRps
NFSe.RetornoWS.Items[i].NumeroNFSe
NFSe.RetornoWS.Items[i].DataEmissaoNFSe
NFSe.RetornoWS.Items[i].CodVerificacao
NFSe.RetornoWS.Items[i].Situacao
NFSe.RetornoWS.Items[i].DataCancelamento
NFSe.RetornoWS.Items[i].ChaveCancelamento
NFSe.RetornoWS.Items[i].Tipo
NFSe.RetornoWS.Items[i].Motivo
NFSe.RetornoWS.Items[i].XmlImpressao
NFSe.RetornoWS.Items[i].XmlRps
NFSe.RetornoWS.Items[i].DataAutorizacao
NFSe.RetornoJson
NFSe.RetornoCSV
Existem 3 possíveis situações para o Status:
EMPROCESSAMENTO:
- Status: EMPROCESSAMENTO
- Protocolo: 520002314280550
Nesse caso, será necessário utilizar o método Consultar informando o Protocolo (Descrito logo abaixo) para obter a situação do Lote Enviado;
Protocolo: NFSE.RetornoWS.Items[0].Protocolo;
SUCESSO:
- Status: SUCESSO
- Protocolo:
- CNPJ: 99999999999999
- Inscricao Municipal: 999999
- Serie do RPS: 1
- Número do RPS: 164
- Número da NFS-e: 86
- Data de Emissão: 2020-03-25T00:00:00-03:00
- Código de Verificação: XXXX-YYYYY
- Situação: AUTORIZADA
- Data De Cancelamento: 2020-03-25T16:56:05.941-03:00
- Chave de Cancelamento: 86|86_164_1_1
- Tipo: 1
- Motivo:
- XML: <XmlCompletoDaNotaAutorizada>
- Data de Autorização: 2020-03-25
Nesse caso, não é necessário realizar nenhuma consulta pois a nota já está autorizada e as suas informações podem ser acessadas através da NFSe.RetornoWS.Items[0..n].NomeDaPropriedade
ERRO:
- Status: ERRO
- Motivo: BTH03-Lote de RPS já enviado. (Favor verificar se o lote já não foi enviado anteriormente, ou se a numeração do lote foi incrementada.)
A nota foi rejeitada com o Motivo descrito na propriedade NFSE.RetornoWS.Items[0].Motivo;
Abaixo temos um exemplo de retorno da função NFSe.RetornoJson:
{
"resposta":[
{
"status" : "SUCESSO",
"motivo" : "",
"protocolo" : "",
"cnpj" : "99999999999999",
"inscMunicipal" : "9999",
"numeroRps" : "195",
"serieRps" : "1",
"tipo" : "1",
"numeroNFSe" : "93",
"dataEmissaoNFSe" : "2020-04-15T00:00:00-03:00",
"codVerificacao" : "XXXXXYYYYYY",
"situacao" : "AUTORIZADA",
"dataAutorizacao" : "2020-04-15",
"dataCancelamento" : "2020-04-15T16:12:54.059-03:00",
"chaveCancelamento" : "93|93_195_1_1",
"xmlImpressao" : "XML da NFSe"
}
]
}
Abaixo temos um exemplo de retorno da função NFSe.RetornoCSV:
SUCESSO;;99999999999999;;1;000;000;2020-07-10T00:00:00;2020-07-10T00:00:00;0000000;AUTORIZADA;;000;<ComplNfse><Nfse><InfNfse><Numero>000</Numero><CodigoVerificacao>0000000</CodigoVerificacao><DataEmissao>2020-07-10T20:20:13.830-03:00</DataEmissao><IdentificacaoRps><Numero>000</Numero><Serie>0</Serie><Tipo>0</Tipo></IdentificacaoRps><DataEmissaoRps>2020-07-10</DataEmissaoRps><NaturezaOperacao>1</NaturezaOperacao><OptanteSimplesNacional>2</OptanteSimplesNacional><Competencia>2020-07-01</Competencia><OutrasInformacoes>nota teste</OutrasInformacoes><Servico><Valores><ValorServicos>1.00</ValorServicos><ValorDeducoes>0</ValorDeducoes><ValorIr>0.10</ValorIr><IssRetido>2</IssRetido><ValorIss>0.10</ValorIss><BaseCalculo>1.00</BaseCalculo><Aliquota>3</Aliquota><ValorLiquidoNfse>1.00</ValorLiquidoNfse><DescontoCondicionado>0</DescontoCondicionado><DescontoIncondicionado>0</DescontoIncondicionado></Valores><ItemListaServico>1010</ItemListaServico><CodigoCnae>0000000</CodigoCnae><Discriminacao>nota de teste</Discriminacao><CodigoMunicipio>0000000</CodigoMunicipio></Servico><PrestadorServico><IdentificacaoPrestador><Cnpj>99999999999999</Cnpj><InscricaoMunicipal>1111</InscricaoMunicipal></IdentificacaoPrestador><RazaoSocial>TecnoSpeed S.A.</RazaoSocial><NomeFantasia>S.A.</NomeFantasia><Endereco><Endereco>AV XV DE NOVEMBRO</Endereco><Numero>1</Numero><Bairro>CENTRO</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Email>comercial@tecnospeed.com.br</Email></Contato></PrestadorServico><TomadorServico><IdentificacaoTomador><CpfCnpj><Cnpj>99999999999999</Cnpj></CpfCnpj></IdentificacaoTomador><RazaoSocial>TESTE TESTE</RazaoSocial><Endereco><Endereco>CAMPOS BICUDO</Endereco><Numero>00</Numero><Complemento/><Bairro>Zona 7</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Telefone>999999999</Telefone><Email>comercial@tecnospeed.com.br</Email></Contato></TomadorServico><IntermediarioServico/><OrgaoGerador><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf></OrgaoGerador><ConstrucaoCivil/></InfNfse></Nfse></ComplNfse>;1;
Exemplos
Delphi
begin
NFSe.Enviar("Conteúdo do aTx2");
mmTipado.Clear;
for i := 0 to NFSe.RetornoWS.Count - 1 do
begin
mmTipado.Lines.Add('Status: ' + NFSe.RetornoWS.Items[i].Status);
mmTipado.Lines.Add('Protocolo: ' + NFSe.RetornoWS.Items[i].Protocolo);
mmTipado.Lines.Add('CNPJ: ' + NFSe.RetornoWS.Items[i].CNPJ);
mmTipado.Lines.Add('Inscricao Municipal: ' + NFSe.RetornoWS.Items[i].InscricaoMunicipal);
mmTipado.Lines.Add('Serie do RPS: ' + NFSe.RetornoWS.Items[i].SerieRps);
mmTipado.Lines.Add('Número do RPS: ' + NFSe.RetornoWS.Items[i].NumeroRps);
mmTipado.Lines.Add('Número da NFS-e: ' + NFSe.RetornoWS.Items[i].NumeroNFSe);
mmTipado.Lines.Add('Data de Emissão: ' + NFSe.RetornoWS.Items[i].DataEmissaoNFSe);
mmTipado.Lines.Add('Código de Verificação: ' + NFSe.RetornoWS.Items[i].CodVerificacao);
mmTipado.Lines.Add('Situação: ' + NFSe.RetornoWS.Items[i].Situacao);
mmTipado.Lines.Add('Data De Cancelamento: ' + NFSe.RetornoWS.Items[i].DataCancelamento);
mmTipado.Lines.Add('Chave de Cancelamento: ' + NFSe.RetornoWS.Items[i].ChaveCancelamento);
mmTipado.Lines.Add('Tipo: ' + NFSe.RetornoWS.Items[i].Tipo);
mmTipado.Lines.Add('Motivo: ' + NFSe.RetornoWS.Items[i].Motivo);
mmTipado.Lines.Add('XML: ' + NFSe.RetornoWS.Items[i].XmlImpressao);
mmTipado.Lines.Add('XML: ' + NFSe.RetornoWS.Items[i].XmlRps);
mmTipado.Lines.Add('Data de Autorização: ' + NFSe.RetornoWS.Items[i].DataAutorizacao);
end;
mmTipado.Lines.Add('Json: ' + NFSe.RetornoJson);
mmCSV.Lines.Add(NFSe.RetornoCSV);
end;
C#
NFSe.Enviar("Conteúdo do aTx2");
Visual Basic
NFSe.Enviar "Conteúdo do aTx2"
PHP
$NFSe -> Enviar("Conteúdo do aTx2");
Consultar
Consultar(aNumeroNFSe, aNumeroRPS, aSerieRPS, aTipoRPS, aProtocolo)
Realiza a consulta necessária para obter a nota com base nos parâmetros de entrada.
Só será necessário chamar o método Consultar quando o retorno do método Enviar retornar EMPROCESSAMENTO, Exemplo:
NFSe.Enviar(aTx2);
- NFSe.RetornoWS.Items[i].Status
NFSe.RetornoWS.Items[i].Protocolo
- Status: EMPROCESSAMENTO
- Protocolo: 520002314280550
Nesse caso é necessário chamar o método Consultar informando o número do protocolo no parâmetro aProtocolo do método.
Se no retorno da Consulta a propriedade XmlImpressao não conter valor, será necessária realizar uma nova consulta informando parâmetros diferentes para obter um XML válido para impressão.
Caso desejar chamar o método de consulta mesmo assim, aconselhamos que todos os parâmetros do método Consultar sejam preenchidos, pois dessa forma, o componente se encarregará de realizar a consulta da melhor maneira possível.
Exemplo:
Consultar(const aNumeroNFse: string=''; aNumeroRPS: string=''; aSerie: string=''; aTipo: string=''; aProtocolo: string=''): String;
Parâmetros
Argumento | Tipo | Detalhes |
aNumeroNFSe | String | Número da NFSe cuja nota deseja consultar |
aNumeroRPS | String | Número do RPS cuja nota deseja consultar |
aSerieRPS | String | Série do RPS cuja nota deseja consultar |
aTipoRPS | String | Tipo do RPS cuja nota deseja consultar |
aProtocolo | String | Protocolo do lote cujo as notas deseja consultar |
Retorno
O retorno estará na propriedade RetornoWS do NFSe, Exemplo NFSe.RetornoWS.
- O NFSe.RetornoWS terá um contador de interações podendo ter 1 ou muitas posições dependendo da quantidade de RPS enviados no tx2.
- NFSe.RetornoWS.Items[0..N]
- O NFSe.RetornoWS.Items[0..N] terá os seguintes campos de cada nota:
- NFSe.RetornoWS.Items[0..N]
- A instância NFSe conta com duas funções de retorno, a função RetornoJson e RetornoCSV onde cada uma contém seus respectivos tipos de retorno.
Existem 3 possíveis situações para o Status:
EMPROCESSAMENTO:
- Status: EMPROCESSAMENTO
Protocolo: 520002314280550
Nesse caso, será necessário realizar a consulta novamente pois a nota ainda não foi processada no WebService da prefeitura.
Protocolo: NFSE.RetornoWS.Items[0].Protocolo;
SUCESSO:
- Status: SUCESSO
- Protocolo:
- CNPJ: 99999999999999
- Inscricao Municipal: 999999
- Serie do RPS: 1
- Número do RPS: 164
- Número da NFS-e: 86
- Data de Emissão: 2020-03-25T00:00:00-03:00
- Código de Verificação: XXXX-YYYYY
- Situação: AUTORIZADA
- Data De Cancelamento: 2020-03-25T16:56:05.941-03:00
- Chave de Cancelamento: 86|86_164_1_1
- Tipo: 1
- Motivo:
- XML: <XmlCompletoDaNotaAutorizada>
- Data de Autorização: 2020-03-25
Nesse caso, não é necessário realizar nenhuma consulta pois a nota já está autorizada e as suas informações podem ser acessadas através da NFSe.RetornoWS.Items[0..n].NomeDaPropriedade
ERRO:
- Status: ERRO
- Motivo: BTH03-Lote de RPS já enviado. (Favor verificar se o lote já não foi enviado anteriormente, ou se a numeração do lote foi incrementada.)
A nota foi rejeitada com o Motivo descrito na propriedade NFSE.RetornoWS.Items[0].Motivo;
Abaixo temos um exemplo de retorno da função NFSe.RetornoJson:
{
"resposta":[
{
"status" : "SUCESSO",
"motivo" : "",
"protocolo" : "",
"cnpj" : "99999999999999",
"inscMunicipal" : "9999",
"numeroRps" : "195",
"serieRps" : "1",
"tipo" : "1",
"numeroNFSe" : "93",
"dataEmissaoNFSe" : "2020-04-15T00:00:00-03:00",
"codVerificacao" : "XXXXXYYYYYY",
"situacao" : "AUTORIZADA",
"dataAutorizacao" : "2020-04-15",
"dataCancelamento" : "2020-04-15T16:12:54.059-03:00",
"chaveCancelamento" : "93|93_195_1_1",
"xmlImpressao" : "XML da NFSe"
}
]
}
Abaixo temos um exemplo de retorno da função NFSe.RetornoCSV:
SUCESSO;;99999999999999;;1;000;000;2020-07-10T00:00:00;2020-07-10T00:00:00;0000000;AUTORIZADA;;000;<ComplNfse><Nfse><InfNfse><Numero>000</Numero><CodigoVerificacao>0000000</CodigoVerificacao><DataEmissao>2020-07-10T20:20:13.830-03:00</DataEmissao><IdentificacaoRps><Numero>000</Numero><Serie>0</Serie><Tipo>0</Tipo></IdentificacaoRps><DataEmissaoRps>2020-07-10</DataEmissaoRps><NaturezaOperacao>1</NaturezaOperacao><OptanteSimplesNacional>2</OptanteSimplesNacional><Competencia>2020-07-01</Competencia><OutrasInformacoes>nota teste</OutrasInformacoes><Servico><Valores><ValorServicos>1.00</ValorServicos><ValorDeducoes>0</ValorDeducoes><ValorIr>0.10</ValorIr><IssRetido>2</IssRetido><ValorIss>0.10</ValorIss><BaseCalculo>1.00</BaseCalculo><Aliquota>3</Aliquota><ValorLiquidoNfse>1.00</ValorLiquidoNfse><DescontoCondicionado>0</DescontoCondicionado><DescontoIncondicionado>0</DescontoIncondicionado></Valores><ItemListaServico>1010</ItemListaServico><CodigoCnae>0000000</CodigoCnae><Discriminacao>nota de teste</Discriminacao><CodigoMunicipio>0000000</CodigoMunicipio></Servico><PrestadorServico><IdentificacaoPrestador><Cnpj>99999999999999</Cnpj><InscricaoMunicipal>1111</InscricaoMunicipal></IdentificacaoPrestador><RazaoSocial>TecnoSpeed S.A.</RazaoSocial><NomeFantasia>S.A.</NomeFantasia><Endereco><Endereco>AV XV DE NOVEMBRO</Endereco><Numero>1</Numero><Bairro>CENTRO</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Email>comercial@tecnospeed.com.br</Email></Contato></PrestadorServico><TomadorServico><IdentificacaoTomador><CpfCnpj><Cnpj>99999999999999</Cnpj></CpfCnpj></IdentificacaoTomador><RazaoSocial>TESTE TESTE</RazaoSocial><Endereco><Endereco>CAMPOS BICUDO</Endereco><Numero>00</Numero><Complemento/><Bairro>Zona 7</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Telefone>999999999</Telefone><Email>comercial@tecnospeed.com.br</Email></Contato></TomadorServico><IntermediarioServico/><OrgaoGerador><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf></OrgaoGerador><ConstrucaoCivil/></InfNfse></Nfse></ComplNfse>;1;
Exemplos
Delphi
begin
NFSe.Consultar('Número da NFSe', 'Número do RPS', 'Série do RPS', 'Tipo do RPS', 'Protocolo da nota');
mmTipado.Clear;
for i := 0 to NFSe.RetornoWS.Count - 1 do
begin
mmTipado.Lines.Add('Status: ' + NFSe.RetornoWS.Items[i].Status);
mmTipado.Lines.Add('Protocolo: ' + NFSe.RetornoWS.Items[i].Protocolo);
mmTipado.Lines.Add('CNPJ: ' + NFSe.RetornoWS.Items[i].CNPJ);
mmTipado.Lines.Add('Inscricao Municipal: ' + NFSe.RetornoWS.Items[i].InscricaoMunicipal);
mmTipado.Lines.Add('Serie do RPS: ' + NFSe.RetornoWS.Items[i].SerieRps);
mmTipado.Lines.Add('Número do RPS: ' + NFSe.RetornoWS.Items[i].NumeroRps);
mmTipado.Lines.Add('Número da NFS-e: ' + NFSe.RetornoWS.Items[i].NumeroNFSe);
mmTipado.Lines.Add('Data de Emissão: ' + NFSe.RetornoWS.Items[i].DataEmissaoNFSe);
mmTipado.Lines.Add('Código de Verificação: ' + NFSe.RetornoWS.Items[i].CodVerificacao);
mmTipado.Lines.Add('Situação: ' + NFSe.RetornoWS.Items[i].Situacao);
mmTipado.Lines.Add('Data De Cancelamento: ' + NFSe.RetornoWS.Items[i].DataCancelamento);
mmTipado.Lines.Add('Chave de Cancelamento: ' + NFSe.RetornoWS.Items[i].ChaveCancelamento);
mmTipado.Lines.Add('Tipo: ' + NFSe.RetornoWS.Items[i].Tipo);
mmTipado.Lines.Add('Motivo: ' + NFSe.RetornoWS.Items[i].Motivo);
mmTipado.Lines.Add('XML: ' + NFSe.RetornoWS.Items[i].Xml);
mmTipado.Lines.Add('Data de Autorização: ' + NFSe.RetornoWS.Items[i].DataAutorizacao);
mmTipado.Lines.Add('');
mmTipado.Lines.Add('================================================');
mmTipado.Lines.Add('');
end;
mmTipado.Lines.Add('Json: ' + NFSe.RetornoJson);
mmCSV.Lines.Add(NFSe.RetornoCSV);
end;
C#
retorno = NFSe.Consultar("Número da NFSe", "Número do RPS", "Série do RPS", "Tipo do RPS", "Número do Protocolo");
Visual Basic 6
retorno = NFSe.Consultar"Número da NFSe", "Número do RPS", "Série do RPS", "Tipo do RPS", "Número do Protocolo"
PHP
$retorno = $NFSe->Consultar("Número da NFSe", "Número do RPS", "Série do RPS", "Tipo do RPS", "Número do Protocolo";
Cancelar Nota
Cancela uma NFSe e automaticamente realiza a consulta da nota cancelada. Nesse caso não é necessário chamar o método Consultar para obter a nota cancelada.
Utilize o campo "Chave de Cancelamento: 86|86_164_1_1" obtido no retorno do método Enviar ou Consultar para realizar o cancelamento
Exemplo:
NFSe.CancelarNota(NFSe.RetornoWS.Items[i].ChaveCancelamento);
Parâmetros
Argumento | Tipo | Detalhes |
aChaveCancelamento | String | Chave contendo informações para identificar uma nota |
Retorno
- O retorno estará na propriedade RetornoWS do NFSe, Exemplo: NFSe.RetornoWS.
- O NFSe.RetornoWS terá um contador de interações, no caso do Cancelar, terá apenas 1 posição.
- O NFSe.RetornoWS.Items[0] terá os seguintes campos de cada nota.
- O NFSe.RetornoWS terá um contador de interações, no caso do Cancelar, terá apenas 1 posição.
- A instância NFSe conta com duas funções de retorno, a função RetornoJson e RetornoCSV onde cada uma contém seus respectivos tipos de retorno.
Existem 2 possíveis situações para o Status:
SUCESSO:
- Status: SUCESSO
- Protocolo:
- CNPJ: 99999999999999
- Inscricao Municipal: 999999
- Serie do RPS: 1
- Número do RPS: 164
- Número da NFS-e: 86
- Data de Emissão: 2020-03-25T00:00:00-03:00
- Código de Verificação: XXXX-YYYYY
- Situação: CANCELADA
- Data De Cancelamento: 2020-03-25T16:56:05.941-03:00
- Chave de Cancelamento: 86|86_164_1_1
- Tipo: 1
- Motivo:
- XML: <XmlCompletoDaNotaAutorizada>
- Data de Autorização: 2020-03-25
Nesse caso, a nota já está autorizada e as suas informações podem ser acessadas através da NFSe.RetornoWS.Items[0].NomeDaPropriedade
OU APENAS
SUCESSO:
- Status: SUCESSO
- Data De Cancelamento: 2020-03-25T16:56:05.941-03:00
Nesse caso, o município ao qual o componente está configurado, não possuí o método Consultar previsto pela prefeitura.
ERRO:
- Status: ERRO
Motivo: E78-Número da NFS-e inexistente na base de dados para o prestador do serviço pesquisado. (Informe corretamente o número da NFS-e.)
O cancelamento da nota foi rejeitada com o Motivo descrito na propriedade NFSE.RetornoWS.Items[0].Motivo;
Abaixo temos um exemplo de retorno da função NFSe.RetornoJson:
{
"resposta":[
{
"status" : "SUCESSO",
"motivo" : "",
"protocolo" : "",
"cnpj" : "99999999999999",
"inscMunicipal" : "9999",
"numeroRps" : "195",
"serieRps" : "1",
"tipo" : "1",
"numeroNFSe" : "93",
"dataEmissaoNFSe" : "2020-04-15T00:00:00-03:00",
"codVerificacao" : "XXXXXYYYYYY",
"situacao" : "CANCELADA",
"dataAutorizacao" : "2020-04-15",
"dataCancelamento" : "2020-04-15T16:12:54.059-03:00",
"chaveCancelamento" : "93|93_195_1_1",
"xmlImpressao" : "XML da NFSe"
}
]
}
Abaixo temos um exemplo de retorno da função NFSe.RetornoCSV:
SUCESSO;;99999999999999;;1;000;000;2020-07-10T00:00:00;2020-07-10T00:00:00;0000000;AUTORIZADA;;000;<ComplNfse><Nfse><InfNfse><Numero>000</Numero><CodigoVerificacao>0000000</CodigoVerificacao><DataEmissao>2020-07-10T20:20:13.830-03:00</DataEmissao><IdentificacaoRps><Numero>000</Numero><Serie>0</Serie><Tipo>0</Tipo></IdentificacaoRps><DataEmissaoRps>2020-07-10</DataEmissaoRps><NaturezaOperacao>1</NaturezaOperacao><OptanteSimplesNacional>2</OptanteSimplesNacional><Competencia>2020-07-01</Competencia><OutrasInformacoes>nota teste</OutrasInformacoes><Servico><Valores><ValorServicos>1.00</ValorServicos><ValorDeducoes>0</ValorDeducoes><ValorIr>0.10</ValorIr><IssRetido>2</IssRetido><ValorIss>0.10</ValorIss><BaseCalculo>1.00</BaseCalculo><Aliquota>3</Aliquota><ValorLiquidoNfse>1.00</ValorLiquidoNfse><DescontoCondicionado>0</DescontoCondicionado><DescontoIncondicionado>0</DescontoIncondicionado></Valores><ItemListaServico>1010</ItemListaServico><CodigoCnae>0000000</CodigoCnae><Discriminacao>nota de teste</Discriminacao><CodigoMunicipio>0000000</CodigoMunicipio></Servico><PrestadorServico><IdentificacaoPrestador><Cnpj>99999999999999</Cnpj><InscricaoMunicipal>1111</InscricaoMunicipal></IdentificacaoPrestador><RazaoSocial>TecnoSpeed S.A.</RazaoSocial><NomeFantasia>S.A.</NomeFantasia><Endereco><Endereco>AV XV DE NOVEMBRO</Endereco><Numero>1</Numero><Bairro>CENTRO</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Email>comercial@tecnospeed.com.br</Email></Contato></PrestadorServico><TomadorServico><IdentificacaoTomador><CpfCnpj><Cnpj>99999999999999</Cnpj></CpfCnpj></IdentificacaoTomador><RazaoSocial>TESTE TESTE</RazaoSocial><Endereco><Endereco>CAMPOS BICUDO</Endereco><Numero>00</Numero><Complemento/><Bairro>Zona 7</Bairro><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf><Cep>88888888</Cep></Endereco><Contato><Telefone>999999999</Telefone><Email>comercial@tecnospeed.com.br</Email></Contato></TomadorServico><IntermediarioServico/><OrgaoGerador><CodigoMunicipio>0000000</CodigoMunicipio><Uf>PR</Uf></OrgaoGerador><ConstrucaoCivil/></InfNfse></Nfse></ComplNfse>;1;
Exemplos
Delphi
begin
NFSe.CancelarNota(aChaveCancelamento);
mmTipado.Clear;
mmCSV.Clear;
for i := 0 to NFSe.RetornoWS.Count - 1 do
begin
mmTipado.Lines.Add('Status: ' + NFSe.RetornoWS.Items[i].Status);
mmTipado.Lines.Add('Protocolo: ' + NFSe.RetornoWS.Items[i].Protocolo);
mmTipado.Lines.Add('CNPJ: ' + NFSe.RetornoWS.Items[i].CNPJ);
mmTipado.Lines.Add('Inscricao Municipal: ' + NFSe.RetornoWS.Items[i].InscricaoMunicipal);
mmTipado.Lines.Add('Serie do RPS: ' + NFSe.RetornoWS.Items[i].SerieRps);
mmTipado.Lines.Add('Número do RPS: ' + NFSe.RetornoWS.Items[i].NumeroRps);
mmTipado.Lines.Add('Número da NFS-e: ' + NFSe.RetornoWS.Items[i].NumeroNFSe);
mmTipado.Lines.Add('Data de Emissão: ' + NFSe.RetornoWS.Items[i].DataEmissaoNFSe);
mmTipado.Lines.Add('Código de Verificação: ' + NFSe.RetornoWS.Items[i].CodVerificacao);
mmTipado.Lines.Add('Situação: ' + NFSe.RetornoWS.Items[i].Situacao);
mmTipado.Lines.Add('Data De Cancelamento: ' + NFSe.RetornoWS.Items[i].DataCancelamento);
mmTipado.Lines.Add('Chave de Cancelamento: ' + NFSe.RetornoWS.Items[i].ChaveCancelamento);
mmTipado.Lines.Add('Tipo: ' + NFSe.RetornoWS.Items[i].Tipo);
mmTipado.Lines.Add('Motivo: ' + NFSe.RetornoWS.Items[i].Motivo);
mmTipado.Lines.Add('XML: ' + NFSe.RetornoWS.Items[i].XmlImpressao);
mmTipado.Lines.Add('Data de Autorização: ' + NFSe.RetornoWS.Items[i].DataAutorizacao);
mmTipado.Lines.Add('');
mmTipado.Lines.Add('================================================');
mmTipado.Lines.Add('');
end;
mmTipado.Lines.Add('Json: ' + NFSe.RetornoJson);
mmCSV.Lines.Add(NFSe.RetornoCSV);
end;
C#
retorno = NFSe.CancelarNota("Chave da NFS-e");
Visual Basic 6
retorno = NFSe.CancelarNota"Chave da NFS-e"
PHP
$retorno = $NFSe->CancelarNota("Chave da NFS-e");
Exportar para PDF
Através desse método é possível exportar um PDF de NFSe ou RPS com os campos customizados.
Exemplo:
ExportarImpressaoParaPDF(const aXmlNFSe, aXmlRPs: XMLString; const aCamposCustomizados: string=''; const aDiretorioDestinoPDF: string);
Parâmetros
Argumento | Tipo | Detalhes |
aXmlNFSe | String | Utilize esse parâmetro apenas para gerar um PDF com a impressão da NFSe, Caso quiser gerar um RPS, não informe esse campo. |
aXmlRPS | String | Utilize esse parâmetro para gerar um PDF com a impressão de RPS. |
aCamposCustomizados | String | Informe nesse parâmetro o arquivo Tx2 ou o caminho do arquivo Tx2, utilizado no envio da nota, o componente irá extrair os campos customizados contidos no Tx2 e preencher o DataSet de impressão automaticamente. |
aDiretorioDestinoPDF |
String |
Caminho onde o PDF será gerado, ex: C:\NFSe\minha-nfse.pdf |
Retorno
Esse método não possui retorno, ele é utilizado apenas para realizar a exportação de um PDF.
Exemplos
Exemplo de impressão de NFSe
-
ExportarImpressaoParaPDF('Xml da NFSe', 'XML do RPS', 'Meu arquivoTx2', 'C:\NFSe\minha-nfse.pdf');
- Para alguns municípios, é necessário informar o XML do RPS no parâmetro aXmlRPS para que todos os campos da nota sejam impressos corretamente, por esse motivo, aconselhamos que seja informado o xml de RPS juntamente com o de NFSe.
Exemplo de impressão de RPS
-
ExportarImpressaoParaPDF('', 'XML do RPS', 'Meu arquivoTx2', 'C:\NFSe\minha-nfse.pdf');
- É necessário que o primeiro parâmetro do método esteja vazio para imprimir um RPS.
Delphi
NFSe.ExportarImpressaoParaPDF('XML da NFSe', 'XML do RPS', 'Campos customizados utilizando o TX2', 'Caminho completo para salvar o PDF.');
C#
NFSe.ExportarImpressaoParaPDF("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2", "Caminho completo para salvar o PDF.");
Visual Basic 6
NFSe.ExportarImpressaoParaPDF "XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2, "Caminho completo para salvar o PDF.""
PHP
$NFSe->ExportarImpressaoParaPDF ("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2", "Caminho completo para salvar o PDF.");
Imprimir Nota
Através desse método é possível imprimir uma NFSe ou RPS com os campos customizados.
Parâmetros
Argumento | Tipo | Detalhes |
aXmlNFSe | String | Utilize este parâmetro apenas para gerar um PDF com a impressão da NFSe, Caso quiser gerar um RPS, não informe esse campo. |
aXmlRPS | String | Utilize este parâmetro para gerar um PDF com a impressão de RPS. |
aCamposCustomizados | String | Informe nesse parâmetro o arquivo Tx2 ou o caminho do arquivo Tx2 utilizado no envio da nota, o componente irá extrair os campos customizados contidos no Tx2 e preencher o DataSet de impressão automaticamente. |
aNomeImpressora | String | Utilize este parâmetro para informar o nome da impressora. |
Retorno
Esse método não possui retorno, ele é utilizado apenas para realizar a impressão.
Exemplos
Exemplo de impressão de NFSe:
-
Imprimir('Xml da NFSe', 'XML do RPS', 'Meu arquivoTx2', 'Nome impressora');
- Para alguns municípios, é necessário informar o XML do RPS no parâmetro aXmlRPS para que todos os campos da nota sejam impressos corretamente, por esse motivo, aconselhamos que seja informado o xml de RPS juntamente com o de NFSe.
Exemplo de impressão de RPS:
-
Imprimir('', 'XML do RPS', 'Meu arquivoTx2', 'Nome impressora');
- É necessário que o primeiro parâmetro do método esteja vazio para imprimir um RPS.
Delphi
NFSe.Imprimir('XML da NFSe', 'XML do RPS', 'Campos customizados utilizando o TX2', 'Nome impressora');
C#
NFSe.Imprimir("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2", "Nome impressora");
Visual Basic 6
NFSe.Imprimir"XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2", "Nome impressora"
PHP
$NFSe->Imprimir("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2", "Nome impressora");
- As impressoras devem estar instaladas e sendo reconhecidas pelo Windows.
Visualizar Nota
Através desse método é possível visualizar uma NFSe ou RPS com os campos customizados.
Parâmetros
Argumento | Tipo | Detalhes |
aXmlNFSe | String | Utilize este parâmetro apenas para gerar um PDF com a impressão da NFSe, Caso quiser gerar um RPS, não informe esse campo. |
aXmlRPS | String | Utilize este parâmetro para gerar um PDF com a impressão de RPS. |
aCamposCustomizados | String | Informe nesse parâmetro o arquivo Tx2 ou o caminho do arquivo Tx2 utilizado no envio da nota, o componente irá extrair os campos customizados contidos no Tx2 e preencher o DataSet de impressão automaticamente. |
Retorno
Esse método não possui retorno, ele é utilizado apenas para visualizar a impressão.
Exemplos
Exemplo de impressão de NFSe:
-
VisualizarImpressao('Xml da NFSe', 'XML do RPS', 'Meu arquivoTx2');
- Para alguns municípios, é necessário informar o XML do RPS no parâmetro aXmlRPS para que todos os campos da nota sejam impressos corretamente, por esse motivo, aconselhamos que seja informado o xml de RPS juntamente com o de NFSe.
Exemplo de impressão de RPS:
-
VisualizarImpressao('', 'XML do RPS', 'Meu arquivoTx2');
- É necessário que o primeiro parâmetro do método esteja vazio para imprimir um RPS.
Delphi
NFSe.VisualizarImpressao('XML da NFSe', 'XML do RPS', 'Campos customizados utilizando o TX2');
C#
NFSe.VisualizarImpressao("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2");
Visual Basic 6
NFSe.VisualizarImpressao"XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2"
PHP
$NFSe->VisualizarImpressao("XML da NFSe", "XML do RPS", "Campos customizados utilizando o TX2");
Comentários
0 comentário
Por favor, entre para comentar.