gabrielpedepera/sigiss

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# 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).