- 10. Funcionalidades
10.5. GeraLoteRPS - 10.4. Validar Schema XML
« Anterior - 10.6. GeraLoteRPS versão 2.00 [18-03-12]
Próximo »
10.5. GeraLoteRPS
Gerar Lote de RPS
Assinatura
string geraLoteRPS(string LoteRPSTXT, string nroLote, string nomeCertificado, string cMunicipio, out int resultado, out string msgResultado, out string erros, string licenca);
Descrição:
Funcionalidade para gerar um lote de RPS a partir de um TXT, é a forma mais simples e rápida de gerar um Lote de RPS.
Esta funcionalidade:
- gera o XML do RPS a partir do TXT;
- assina o XML do RPS se necessário;
- forma o lote de RPS;
- assina o lote de RPS.
Preenchimento do nomeCertificado
informar o Nome do titular (campo Assunto) do certificado digital a ser utlizado na conexão SSL. Ex.: "CN=NFe - Associacao NF-e:99999090910270, C=BR, L=PORTO ALEGRE, O=Teste Projeto NFe RS, OU=Teste Projeto NFe RS, S=RS"
Parâmetros:
| nome | tipo | fluxo | descrição |
|---|---|---|---|
| loteRPSTXT | string | entrada | informar a string com o TXT gerado de acordo com o leiaute da string TXT de entrada da DLL desta página, existem exemplos de arquivos TXT no pasta ..\NFSe_Util\ExemploXML do demo. |
| nroLote | string | entrada | informar a string com o número do lote O número do lote não pode ser reutilizado na cidades atendidas pela Betha |
| nomeCertificado | string | entrada | informar o Nome do titular (campo Assunto) do certificado digital a ser utlizado na conexão SSL. Ex.: "CN=NFe - Associacao NF-e:99999090910270, C=BR, L=PORTO ALEGRE, O=Teste Projeto NFe RS, OU=Teste Projeto NFe RS, S=RS" |
| cMunicipio | string | entrada | informar o código do IBGE do Município para o qual será enviado o lote de RPS. Obs: Verifique se a funcionalidade é compatível com o seu munícipio, a funcionalidade não é compatível com: São Paulo/SP e municípios atendidos pelos provedores DSF e Equiplano |
| resultado | inteiro | saída | retorna o resultado da chamada da funcionalidade |
| msgResultado | string | saída | retorna a literal do resultado da chamada da DLL |
| erros | string | saída | retorna a lista de erros ocorridos na conversão |
| licenca | string | entrada | informar a chave da licença de uso, deixar em branco para uso em ambiente de homologação |
Leiaute da string TXT de entrada:
Orientação de preenchimento
padrão do string de entrada - o string TXT pode ter até 100 registro RPS de tamanho fixo de 3053 caracteres separados por CR/LF.
quantidade máxima de RPS por Lote - cada registro de 3053 caracteres representa um RPS, assim, a quantidade máxima de RPS permitidos é 100 registros de RPS, mas nem todos os municípios aceitam mais de 50 RPS por lote, também pode existir o limite no tamanho da mensagem (Ex. 500Kb), assim verifique os limites na documentação técnica do respectivo município.
preenchimento dos campos - Os registros são posicionais e os campos tem tamanho fixo que devem ser preenchidos da seguinte forma:
- C - campo caractere, preechimento da esquerda para a direita, acrescentar brancos até completar o tamanho do campo;
- D - campo data, com o seguinte formato: AAAA-MM-DDTHH:MM:SS;
- N - campo numérico, prenchimento da direita para a esquerda, acrescentar zeros à esquerda até completar o tamanho do campo. Os campos de valores devem ser informados sem o ponto decimal, respeitando a quantidade de casas decimais previstas: 2 para valor e 4 para alíquota.
preenchimento de campos ou grupos opcionais - nem todos os RPS têm os grupos e/ou campos destacados na cor verde, quando não existir a informação o campo deve ser preechido com:
- zeros, quando o campo for numérico;
- brancos, quando o campo for caractere
diferença de leiaute dos RPS de cada município - não existe um padrão nacional de RPS, assim existem pequenas diferenças nos RPS de cada município ou provedor, sendo necessário consultar a documentação técnica disponibilizada pela prefeitura para fazer o correto preenchimento dos campos.
Solicitamos que entre em contato sempre que identificar alguma informação incorreta ou equívocada.
IMPORTANTE: A DLL somente oferece a funcionalidade para converter os dados informados no TXT para o XML do RPS, os esclarecimentos de como cada campo do RPS deve ser preenchido e quais seriam os valores válidos devem ser obtidos na documentação da prefeitura.
Falha na Assinatura
O certificado digital é responsável pela falha na assinatura, as principais causas são:
Uso de Certificado Digital sem chave privada - é comum o desenvolvedoer receber o arquivo de certificado digital de seu cliente sem a chave privada, este tipo de arquivo tem extensão cer, se este for o caso solicite o arquivo novamente e peça para exportar a chave privada. o arquivo gerado deve ter a extensão pfx e será protegido por senha.
Certificado Digital do tipo A3 ausente - o certificado digital do tipo A3 pode estar com mal contato ou ausente, tente reconectar o dispositivo e verifique o status do certificado digital no aplicativo de administração do certificado digital.
Certificado Digital do tipo A1 da CEF
Existe um "macete" para utilizar o certificado digital da CAIXA:
O problema deste certificado é que apesar de ser um certificado digital A1, ele age como se fosse um certificado digital A3 e utiliza o CSP próprio (cefcert.dll que fica na pasta csp da aplicação da caixa), que não tem suporte para o tipo de assinatura do projeto (só funciona para autenticação).
Assim, é necessário fazer com que o certificado utilize o CSP do Windows.
Os passos são:
- instalar o certificado digital conforme orientação da CEF;
- verificar o funcionamento do certificado e que o certificado consta da lista de certificados no Internet Explorer;
- exportar o certificado digital pelo Internet Explorer;
- desinstalar o aplicativo da CAIXA;
- verificar se a DLL não ficou na pasta da aplicação da CAIXA;
- importar o certificado digital exportado no item 3.
Os passos acima funcionam para windows XP e vista, mas não existe garantia de funcionamento para o windows 7, assim se o equipamento tiver windows 7, tente fazer o processo em um equipamento que tenha windows XP, o certificado gerado no item 3 deve funcionar no windows 7.
Reinstale o Certificado Digital - se não for nenhum dos casos acima, tente reinstalar o certificado digital novamente.
| Campo | tipo | tam. | posição inicial |
posição final |
observação | |||
|---|---|---|---|---|---|---|---|---|
| IdentificacaoRps | Numero | N | 15 | 1 | 15 | |||
| Serie | C | 5 | 16 | 20 | deve ser numérico para Belo Horizonte/MG e os municípios usuários do ISS.NET | |||
| Tipo | C | 1 | 21 | 21 | informar o código de tipo de RPS: 1 - RPS 2 - Nota Fiscal Conjugada (Mista) 3 - Cupom |
|||
| DataEmissao | D | 19 | 22 | 40 | informar no formato: AAAA-MM-DDTHH:MM:SS |
|||
| NaturezaOperacao | C | 1 | 41 | 41 | informar o código de natureza da operação: 1 - Tributação no município 2 - Tributação fora do município 3 - Isenção 4 - Imune 5 - Exigibilidade suspensa por decisão judicial 6 - Exigibilidade suspensa por procedimento administrativo Obs.:informar os seguintes códigos para municípios com provedor Pública: 1 - ISS próprio 2 - ISS retido por tomador do município 3 - ISS retido por tomador de fora do município 4 - Isento/Imune 5 - ISS próprio pago para outro município 6 - Simples Nacional (pagamento na DAS) 7 - Simples Nacional (imposto retido) 8 - ISS Fixo (sociedade uniprofissional) 9 - Estimativa Fiscal A - Escritório Contábil (Simples Nacional) informar os seguintes códigos para municípios com provedor Thema: 1- Imposto devido em São Leopoldo, com obrigação de retenção na fonte 2 - Imposto devido em São Leopoldo, sem obrigação de retenção na fonte 3 - Não tributável 4 - Imposto recolhido pelo regime único de arrecadação Simples Nacional 5 - Imposto devido em São Leopoldo, com obrigação de retenção na fonte 6 - Imposto devido em São Leopoldo, sem obrigação de retenção na fonte 7 - Imposto devido fora de São Leopoldo, com obrigação de retenção na fonte 8 - Imposto devido fora de São Leopoldo, sem obrigação de retenção na fonte 9 - Não tributável A - Imposto recolhido pelo regime único de arrecadação Simples Nacional B - Não tributável. |
|||
| RegimeEspecialTributacao | C | 1 | 42 | 42 | informar o código de identificação do regime especial de tributação: 1 - Microempresa municipal 2 - Estimativa 3 - Sociedade de profissionais 4 - Cooperativa 5 – MEI – Simples Nacional 6 – ME EPP – Simples Nacional informar branco para omitir o campo |
|||
| OptanteSimplesNacional | C | 1 | 43 | 43 | informar: 1 - Sim ou 2 - Não | |||
| IncentivoCultural | C | 1 | 44 | 44 | informar: 1 - Sim ou 2 - Não | |||
| Status | C | 1 | 45 | 45 | informar o código de status do RPS: 1 - Normal 2 - Cancelado |
|||
| RpsSubstituido | Numero | C | 15 | 46 | 60 | informar brancos nas posições 46 a 66 para omitir o grupo RpsSubstituído | ||
| Serie | C | 5 | 61 | 65 | deve ser numérico para municípios usuários do ISS.NET | |||
| Tipo | C | 1 | 66 | 66 | informar o Código de tipo de RPS: 1 - RPS 2 - Nota Fiscal Conjugada (Mista) 3 - Cupom |
|||
| Servico | Valores | ValorServicos | N | 15,2 | 67 | 81 | ||
| ValorDeducoes | N | 15,2 | 82 | 96 | ||||
| ValorPis | N | 15,2 | 97 | 111 | ||||
| ValorCofins | N | 15,2 | 112 | 126 | ||||
| ValorInss | N | 15,2 | 127 | 141 | ||||
| ValorIR | N | 15,2 | 142 | 156 | ||||
| ValorCsll | N | 15,2 | 157 | 171 | ||||
| IssRetido | N | 1 | 172 | 172 | informar: 1 - Sim ou 2 - Não | |||
| ValorIss | N | 15,2 | 173 | 187 | ||||
| ValorIssRetido | N | 15,2 | 188 | 202 | ||||
| OutrasRetencoes | N | 15,2 | 203 | 217 | ||||
| BaseCalculo | N | 15,2 | 218 | 232 | (+) Valor dos serviços (-) Valor das deduções (-) Descontos incondicionados |
|||
| Aliquota | N | 5,4 | 233 | 237 | FAQ - preenchimento da Aliquota | |||
| ValorLiquidoNfse | N | 15,2 | 238 | 252 | (+) ValorServicos (-) ValorPIS (-) ValorCOFINS (-) ValorINSS (-) ValorIR (-) ValorCSLL (-) OutrasRetençoes (-) ValorISSRetido (-) DescontoIncondicionado (-) DescontoCondicionado Este campo deve ser informado apesar de constar como opcional. |
|||
| DescontoIncondicionado | N | 15,2 | 253 | 267 | ||||
| DescontoCondicionado | N | 15,2 | 268 | 282 | ||||
| ItemListaServico | C | 5 | 283 | 287 | Tabela de código de Serviços Em alguns municípios o campo deve ser informado sem ponto, com 4 dígitos ajustado à esquerda com um branco no final Informar com 4 posições no RPS do ISS.NET(posições de 283 a 286) FAQ - preenchimento do ItemListaServico |
|||
| CodigoCnae | C | 7 | 288 | 294 | Pesquisa CNAE Informar com 8 posições no RPS do ISS.NET (posições de 287 a 294). Preencha o campo com zeros se desejar omitir a tag. |
|||
| CodigoTributacaoMunicipio | C | 20 | 295 | 314 | A tag CodigoTributacaoMunicipio - Codigo de Tributação do Município é um código "proprietário" de cada município, não existe qualquer padrão, assim é necessário contatar o município para identificar qual é a codificação utilizada. Algumas prefeituras adotam o codificação da lista de serviço da LC 116/03 ampliada, como é o caso do prefeitura municipal do Rio de Janeiro/RJ. A prefeitura de Belo Horizonte/MG passou a adotar o CTISS - Código de Tributação do ISSQN a partir de 01/04/2012. As prefeituras que adotam o padrão GINFES utilizam os códigos utilizados no GISS, este é um detalhe importante, verifique se já existia algum sistema ou padrão de prestação de informação na prefeitura, pois as chances de utilizarem a mesma codificação anterior é enorme. Belo Horizonte - o CTISS deve ser utilizado em substituição a CNAE-BH a partir de 01/04/2012. Rio de Janeiro - tabela de serviços. CIDADES GINFES - Consultar a lista de Atividades da GISS Online 1. Seleciona seu Estado e a Cidade; 2. Selecione a Lista de atividades. Informar com o seguinte formato "14.03.00 / 00140300" em Ribeirão Preto/SP FAQ preenchimento do CodigoTributacaoMunicipio |
|||
| Discriminacao | C | 2000 | 315 | 2314 | A DLL substituí a sequência || por CR/LF na montagem do XML, mas cabe observar que a informação de CR/LF para formatar o texto nem sempre é permitida. A Prefeitura de BH/MG substituí o | por CR/LF. |
|||
| CodigoMunicipio | C | 7 | 2315 | 2321 | Informar o código do município de prestação do serviço. Este campo chama-se MunicipioPrestador no RPS do ISS.NET e deve ser informado com 999 para uso no ambiente de homologação do ISS.NET |
|||
| Prestador | Cnpj | C | 14 | 2322 | 2335 | |||
| InscricaoMunicipal | C | 15 | 2336 | 2350 | ||||
| Tomador | IdentificacaoTomador | CpfCnpj | Cpf | C | 11 | 2351 | 2361 | |
| Cnpj | C | 14 | 2362 | 2375 | ||||
| InscricaoMunicipal | C | 15 | 2376 | 2390 | ||||
| RazaoSocial | C | 115 | 2391 | 2505 | ||||
| Endereco | Endereco | C | 125 | 2506 | 2630 | |||
| Numero | C | 10 | 2631 | 2640 | ||||
| Complemento | C | 60 | 2641 | 2700 | ||||
| Bairro | C | 60 | 2701 | 2760 | ||||
| CodigoMunicipio | C | 7 | 2761 | 2767 | Este campo chama-se Cidade no RPS do ISS.NET | |||
| UF | C | 2 | 2768 | 2769 | Este campo chama-se Estado no RPS do ISS.NET | |||
| Cep | C | 8 | 2770 | 2777 | ||||
| Contato | Telefone | C | 11 | 2778 | 2788 | |||
| C | 80 | 2789 | 2868 | |||||
| ItermediarioServico | RazaoSocial | C | 115 | 2869 | 2983 | informar brancos nas posições 2869 a 3023 para omitir o grupo IntermediarioServico | ||
| CpfCnpj | Cpf | C | 11 | 2984 | 2994 | |||
| Cnpj | C | 14 | 2995 | 3008 | ||||
| InscricaoMunicipal | C | 15 | 3009 | 3023 | ||||
| ConstrucaoCivil | CodigoObra | C | 15 | 3024 | 3038 | informar brancos nas posições 3024 a 3053 para omitir o grupo ConstrucaoCivil | ||
| Art | C | 15 | 3039 | 3053 | ||||
Diagrama de RPS padrão:
ATENÇÃO
Podem existir pequenas diferenças no leiaute de cada município, assim utilize o diagrama abaixo como mero material de apoio, procure consultar a documentação técnica do município para ter o diagrama correto.

Exemplo de Criação do TXT
Delphi
procedure TForm1.Button4Click(Sender: TObject); var NumeroRPS: currency; SerieRPS, TipoRPS:string; DataEmissao:TDateTime; VServico, Aliquota: currency; TXT: widestring; begin // // inicializa valores // NumeroRPS := 1234; SerieRPS := 'A'; TipoRPS := '1'; // DataEmissao := now(); // VServico := 120.25; Aliquota := 0.02; // // Monta linha de RPS //------------------------------------------------------------ // Exemplo para formatar CARACTER // // Format('%-5s',[SerieRPS]); // // signficados de %-5s: // - ---> ajustar o texto a esquerda // 5 ---> tamanho final da string // // signficados de %-2000s: // - ---> ajustar o texto a esquerda // 2000 ---> tamanho final da string // //------------------------------------------------------------ // Exemplo para formatar VALOR // // FormatCurr('000000000000', NumeroRPS); // // Mascara deve ter a quantidade de zeros previsto para campo // // IMPORTANTE: necessário "eliminar os decimais" dos valores // multiplique o valor por 100 nos campos de valor // multiplique o valor por 10000 nos campos de aliquota // //------------------------------------------------------------ // Exemplo para formatar DATA // // FormatDateTime('yyyy-mm-dd',DataEmissao)+'T'+FormatDateTime('hh:nn:ss',DataEmissao) // //------------------------------------------------------------ // Concatenar RPS: // // Arquivo := Arquivo + #13+#10+ TXT; // TXT :=''; TXT := TXT + FormatCurr('000000000000', NumeroRPS); TXT := TXT + Format('%-5s',[SerieRPS]); TXT := TXT + Format('%-1s',[TipoRPS]); TXT := TXT + FormatDateTime('yyyy-mm-dd',DataEmissao)+'T'+FormatDateTime('hh:nn:ss',DataEmissao); TXT := TXT + FormatCurr('000000000000', VServico * 100); TXT := TXT + FormatCurr('00000', Aliquota * 10000); ShowMessage(TXT); end;
VB 6.0
Private Sub Command1_Click() Dim NumeroRPS As Double Dim SerieRPS As String Dim TipoRPS As String Dim DataEmissao As Date Dim Vservico As Double Dim Aliquota As Double Dim TXT As String ' ' inicializa valores ' NumeroRPS = 1234 SerieRPS = "A" TipoRPS = "1" ' DataEmissao = Now() ' Vservico = 120.25 Aliquota = 0.0215 ' ' Monta linha de RPS '------------------------------------------------------------ ' Exemplo para formatar CARACTERE ' ' Left(SerieRPS + Space(5), 5) ' ' onde 5 e tamanha maximo do campo desejado ' '------------------------------------------------------------ ' Exemplo para formatar VALOR ' ' Format(NumeroRPS, "000000000000" ) ' ' Mascara deve ter a quantidade de zeros previsto para campo ' ' IMPORTANTE: necessário "eliminar os decimais" dos valores ' multiplique o valor por 100 nos campos de valor ' multiplique o valor por 10000 nos campos de aliquota ' '------------------------------------------------------------ ' Exemplo para formatar DATA ' ' Format(DataEmissao, "yyyy-mm-dd") + "T" + Format(DataEmissao, "hh:mm:ss") ' '------------------------------------------------------------ ' Concatenar RPS: ' ' Arquivo = Arquivo + chr(13)+ chr(10)+ TXT ' TXT = "" TXT = TXT + Format(NumeroRPS, "000000000000") TXT = TXT + Left(SerieRPS + Space(5), 5) TXT = TXT + Left(TipoRPS + Space(1), 1) TXT = TXT + Format(DataEmissao, "yyyy-mm-dd") + "T" + Format(DataEmissao, "hh:mm:ss") TXT = TXT + Format(Vservico * 100, "000000000000") TXT = TXT + Format(Aliquota * 10000, "00000") MsgBox TXT End Sub
Visual FoxPro
Local NumeroRPS as Double Local SerieRPS as String Local TipoRPS as String Local DataEmissao as DateTime Local Vservico as Double Local Aliquota as Short Local TXT as String && && inicializa valores && NumeroRPS = 1234 SerieRPS = "A" TipoRPS = "1" && DataEmissao = DATETIME() && Vservico = 120.25 Aliquota = 0.0215 && && Monta linha de RPS &&------------------------------------------------------------ && Exemplo para formatar CARACTERE && && Left(SerieRPS + Space(5), 5) && && onde 5 e tamanha maximo do campo desejado && &&------------------------------------------------------------ && Exemplo para formatar VALOR && && TXT + TRANSFORM(Vservico * 100, "@L 999999999999") && && Mascara deve ter a quantidade de zeros previsto para campo && && IMPORTANTE: necessário "eliminar os decimais" dos valores && multiplique o valor por 100 nos campos de valor && multiplique o valor por 10000 nos campos de aliquota && &&------------------------------------------------------------ && Exemplo para formatar DATA && && TRANSFORM(TTOC(DataEmissao,1),"@R 9999-99-99T99:99:99") && &&------------------------------------------------------------ && Concatenar RPS: && && Arquivo = Arquivo + chr(13)+ chr(10)+ TXT && TXT = "" TXT = TXT + TRANSFORM(NumeroRPS, "@L 999999999999") TXT = TXT + Left(SerieRPS + Space(5), 5) TXT = TXT + Left(TipoRPS + Space(1), 1) TXT = TXT + TRANSFORM(TTOC(DataEmissao,1),"@R 9999-99-99T99:99:99") TXT = TXT + TRANSFORM(Vservico * 100, "@L 999999999999") TXT = TXT + TRANSFORM(Aliquota * 10000, "@L 99999") ? TXT
Retorno:
O resultado da chamada do geraLoteRPS é o XML de lote de RPS.
O parâmetro resultado retorna um código numérico com os seguintes significados:
| código | Mensagem | origem | regra |
|---|---|---|---|
| 5800 | Lote de RPS gerado com sucesso! | DLL | - |
| 5801 | Erro: O parâmetro LoteRPSTXT sem conteúdo | DLL | - |
| 5802 | Erro: O parâmetro nroLote não contém um valor numérico: [valor recebido pela DLL] | DLL | - |
| 5803 | Erro: O parâmetro nroLote contém um valor fora do intervalo válido (1-999999999999999): [valor recebido pela DLL] | DLL | - |
| 5804 | Erro: O parâmetro nomeCertificado sem conteúdo | DLL | - |
| 5805 | Erro: O parâmetro LoteRPSTXT com conteúdo inválido, veja os erros: [lista de erros] | DLL | - |
| 5806 | Erro: O parâmetro LoteRPSTXT informado com erro de preenchimento, analise o log de erros | DLL | - |
| 5807 | Erro: Erro inesperado no tratamento da leitura do LoteRPSTXT: [mensagem do Windows | DLL | - |
| 5808 | Erro: A quantidade de RPS existente no lote: [{0:0}] fora do intervadlo válido (1-50) | DLL | - |
| 5809 | Erro: O parâmetro LoteRPSTXT informado com erro de preenchimento, analise o log de erros | DLL | - |
| 5810 | Erro: A DLL ainda não foi customizada para gerar o LoteRPS para o Município: [cMunicipio], contate o suporte (www.flexdocs.com.br/suporte) para outras informações | DLL | - |
| 5811 | Erro: Falha na assinatura do lote | DLL | - |
Histórico de atualização:
- 2010-10-18 - 1.0e - Versão beta preliminar.
- 2011-01-08 - 1.0i
- 2011-10-22 - 1.4a - Acrésicmo de código exemplo de geração do TXT do lote RPS
- 10.5. GeraLoteRPS
10. Funcionalidades - « Anterior
10.4. Validar Schema XML - Próximo »
10.6. GeraLoteRPS versão 2.00 [18-03-12]
Download do Manual da CAIXA