Tive e estou tendo muita dificuldade para converter o meu sistema antigo por questão de informações desencontradas, incompletas ou falta de suporte!
O início de tudo foi com relação a parte de assinatura, onde aqui deixo registrada a boa vontade e ajuda do desenvolvedor Flavio Araldi, que participa aquii da lista e prontamente me deu dicas preciosas.
Dada toda dificuldade, decidi compartilhar com vocês este documento e arquivos exemplo em anexo, afinal de contas acho que a comunidade precisa disso, principalmente quando consegue sucesso com a ajuda de terceiros!
Aí vai, lembrando que não sou o dono da verdade e que alguma coisa pode não funcionar no seu sistema, mas pelo menos dará um "norte" para vocês!!
Outro ponto! Muitos erros realmente dependem do suporte da prefeitura.
Isso é um "norte", uma base. Pode ser que tenham particularidades nos sistemas de vocês que no meu caso não tive problemas, portanto se necessitarem de suporte neste sentido recomendo que falem com eles.
# Kit de Sobrevivência NFS-e (Prefeitura de Campinas)
## Relatório de Dicas e Boas Práticas
### XML ###
### ⚠️ Campos Opcionais
NÃO declarar tags vazias! Exemplo:
❌ Errado:
```
<Complemento></Complemento>
```
✅ Certo:
```
<!-- Tag omitida totalmente -->
```
### Tags opcionais mais comuns:
- `<Complemento>`
- `<NumeroProcesso>`
- `<CodigoPais>`
- `<ConstrucaoCivil>`
- `<Intermediario>`
- `<RpsSubstituido>`
- `<ValorPis>`, `<ValorCofins>`, `<ValorInss>`, etc.
### 🧱 Estrutura XML Base (Neste exemplo para o Envio do Lote Assíncrono)
- Raiz deve ser `<EnviarLoteRpsEnvio>` sem namespace
- Evite `ns0:`, `ns2:`, etc. Use tags limpas
- Tag `<LoteRps>` com `versao="2.03"` e `Id`
- Cada RPS dentro de `<ListaRps>` com `InfDeclaracaoPrestacaoServico` contendo `Id`
---
### 🔐 Assinatura Digital
- Assinar cada `<InfDeclaracaoPrestacaoServico>` individualmente
- Assinar também o `<LoteRps>`
- Algoritmos exigidos:
- Digest: `SHA1`
- Assinatura: `RSA-SHA1`
- Transforms:
---
### 📤 Envio
- Headers:
- `Content-Type: text/xml; charset=utf-8`
- `SOAPAction: ""` (string vazia)
Teste no SoapUI! Crie um novo projeto SOAP e coloque esta URL acima! Ele vai montar todos os métodos para você testar!!
---
### ✅ Resposta de Sucesso (também para o exemplo do Envio de Lote)
```
<soap:Body>
<ns4:RecepcionarLoteRpsResponse>
<EnviarLoteRpsResposta>
<NumeroLote>...</NumeroLote>
<DataRecebimento>...</DataRecebimento>
<Protocolo>...</Protocolo>
<ListaMensagemRetorno/>
</EnviarLoteRpsResposta>
</ns4:RecepcionarLoteRpsResponse>
</soap:Body>
```
---
O pacote ZIP contém exemplos práticos e comentados para integração com o WebService da NFS-e Campinas (Abrasf 2.03)
## Conteúdo
### 1. `consulta_lote.xml`
Exemplo de requisição SOAP para o método `ConsultarLoteRps`. Não requer assinatura digital. Campos obrigatórios:
- CNPJ do prestador
- Inscrição Municipal
- Protocolo
### 2. `envio_lote_assinado.xml`
Exemplo de estrutura de envio de lote de RPS (requere assinatura digital). Campos obrigatórios:
- `<LoteRps Id="" versao="2.03">`
- Cada `<InfDeclaracaoPrestacaoServico Id="">` deve ser assinado
- Campo `Discriminacao` com `
` para quebra de linha
- **Assinar o XML antes de envelopar com SOAP**
### 3. `cancelamento_nfse.xml`
Exemplo do método `CancelarNfse`. Requer assinatura digital na tag `<Pedido>` (a assinatura deve ser incluída manualmente).
### 4. `sincronizar_periodo.xml`
Consulta notas emitidas em um período de datas. Método: `ConsultarNfse`. Requer apenas dados do prestador e intervalo de datas.
---
Este kit foi preparado com base em testes reais realizados com a Prefeitura de Campinas (SP) e pode ser adaptado para outras cidades com base no padrão ABRASF 2.03.