README.md
# Sigiss
[![Build Status](https://travis-ci.org/gabrielpedepera/sigiss.svg?branch=master)](https://travis-ci.org/gabrielpedepera/sigiss) [![Code Climate](https://codeclimate.com/github/gabrielpedepera/sigiss/badges/gpa.svg)](https://codeclimate.com/github/gabrielpedepera/sigiss) [![Test Coverage](https://codeclimate.com/github/gabrielpedepera/sigiss/badges/coverage.svg)](https://codeclimate.com/github/gabrielpedepera/sigiss/coverage)
Ruby gem para integração com o WebService para NFS-e do SIGISS.
Atualmente suportando as seguintes cidades:
- Bauru - SP
- Botucatu - SP
- Marília - SP
- Londrina - PR
- Rio Grande - RS
Obs.: A gem foi desenvolvida baseada no WebService de [Marília-SP](https://marilia.sigiss.com.br/marilia/ws/sigiss_ws.php) e [Manual]( http://www.bauru.sp.gov.br/arquivos/arquivos_site/sec_financas/nfse_manual_webservice.pdf).
Caso exista divergências na integrações com outras cidades ou a gem contemple outras para integração,
seu PR ou sua informação será muito bem vinda para atualização.
## Instalação
Adicionar ao Gemfile:
```ruby
gem 'sigiss'
```
Executar:
$ bundle
Ou instalar como:
$ gem install sigiss
## Uso
#### Definir a cidade (gateway) para emissão da Nota Fiscal:
```ruby
gateway = Sigiss::Gateway.new(:marilia, :test) # Ambiente de teste
gateway = Sigiss::Gateway.new(:marilia, :production) # Ambiente de Produção
```
#### Definir os dados referente ao prestador:
```ruby
params = {
ccm: '31000',
cnpj: '90082563000169',
senha: '12345',
crc: '',
crc_estado: ''
}
```
```ruby
provider = Sigiss::Provider.new(params)
```
#### Definir os dados referente ao tomador:
```ruby
params = {
tomador_tipo: '2',
tomador_cnpj: '08600061822',
tomador_email: 'email@tomador.com',
tomador_im: '',
tomador_ie: '',
tomador_razao: 'Pagador de Impostos',
tomador_fantasia: '',
tomador_endereco: 'Rua de Asfalto',
tomador_numero: '100',
tomador_complemento: 'Fundos',
tomador_bairro: 'Bairro Feliz',
tomador_CEP: '17512752',
tomador_cod_cidade: '3127107',
tomador_fone: '1499998888',
tomador_ramal: '',
tomador_fax: '',
tomador_ramal_fax: ''
}
```
```ruby
taker = Sigiss::Taker.new(params)
```
### APIs
#### Emissão
```ruby
invoice = Sigiss::Invoice.new(gateway: gateway, provider: provider, taker: taker)
params = {
aliquota_simples: '',
id_sis_legado: '',
servico: '105',
situacao: 'tp',
valor: '10,00',
base: '10,00',
descricaoNF: 'Teste NF'
}
invoice.build(issue: params)
invoice.issue!
```
```ruby
invoice.success?
=> true
```
```ruby
invoice.response
=> {:gerar_nota_response=>{:retorno_nota=>{:resultado=>"0", :nota=>"0", :link_impressao=>{:"@xsi:type"=>"xsd:string"}, :"@xsi:type"=>"tns:tcRetornoNota"}, :descricao_erros=>{:item=>{:id=>"0", :descricao_processo=>"Processo Geral", :descricao_erro=>"Senha não pode ser verificada", :"@xsi:type"=>"tns:tcEstruturaDescricaoErros"}, :"@xsi:type"=>"SOAP-ENC:Array", :"@soap_enc:array_type"=>"tns:tcEstruturaDescricaoErros[1]"}, :"@xmlns:ns1"=>"urn:sigiss_ws"}}
```
#### Consulta
```ruby
invoice = Sigiss::Invoice.new(gateway: gateway, provider: provider)
params = {
nota: '13114',
serie: '1',
autenticidade: '2ZZGUTL0',
valor: '10,00'
}
invoice.build(fetch: params)
invoice.fetch!
```
```ruby
invoice.success?
=> true
```
```ruby
invoice.response
=> {:consultar_nota_valida_response=>{:retorno_nota=>{:resultado=>"0", :nota=>"0", :link_impressao=>{:"@xsi:type"=>"xsd:string"}, :"@xsi:type"=>"tns:tcRetornoNota"}, :descricao_erros=>{:item=>{:id=>"0", :descricao_processo=>"Processo Geral", :descricao_erro=>"Valor da nota precisa ser informada.", :"@xsi:type"=>"tns:tcEstruturaDescricaoErros"}, :"@xsi:type"=>"SOAP-ENC:Array", :"@soap_enc:array_type"=>"tns:tcEstruturaDescricaoErros[1]"}, :"@xmlns:ns1"=>"urn:sigiss_ws"}}
```
#### Cancelamento
```ruby
invoice = Sigiss::Invoice.new(gateway: gateway, provider: provider)
params = {
nota: '13114',
motivo: 'Falha no Engano',
email: 'email@tomador.com'
}
invoice.build(cancel: params)
invoice.cancel!
```
```ruby
invoice.success?
=> true
```
```ruby
invoice.response
=> {:cancelar_nota_response=>{:retorno_nota=>{:resultado=>"0", :nota=>"0", :link_impressao=>{:"@xsi:type"=>"xsd:string"}, :"@xsi:type"=>"tns:tcRetornoNota"}, :descricao_erros=>{:item=>{:id=>"0", :descricao_processo=>"Processo Geral", :descricao_erro=>"Dados de identificação não encontrados.", :"@xsi:type"=>"tns:tcEstruturaDescricaoErros"}, :"@xsi:type"=>"SOAP-ENC:Array", :"@soap_enc:array_type"=>"tns:tcEstruturaDescricaoErros[1]"}, :"@xmlns:ns1"=>"urn:sigiss_ws"}}
```
## Contribuição
Reportar bugs e Pull Requests são bem vindos no Github em https://github.com/gabrielpedepera/sigiss.
## Licença
A gem está disponível como open source sobre os termos de [MIT License](http://opensource.org/licenses/MIT).