Sigiss

Build Status Code Climate Test 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 e Manual. 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:

gem 'sigiss'

Executar:

$ bundle

Ou instalar como:

$ gem install sigiss

Uso

Definir a cidade (gateway) para emissão da Nota Fiscal:

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:

params = {
  ccm: '31000',
  cnpj: '90082563000169',
  senha: '12345',
  crc: '',
  crc_estado: ''
}
provider = Sigiss::Provider.new(params)

Definir os dados referente ao tomador:

params = {
  tomador_tipo: '2',
  tomador_cnpj: '08600061822',
  tomador_email: '[email protected]',
  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: ''
}
taker = Sigiss::Taker.new(params)

APIs

Emissão

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!
invoice.success?
=> true
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

invoice = Sigiss::Invoice.new(gateway: gateway, provider: provider)
params = {
  nota: '13114',
  serie: '1',
  autenticidade: '2ZZGUTL0',
  valor: '10,00'
}
invoice.build(fetch: params)
invoice.fetch!
invoice.success?
=> true
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

invoice = Sigiss::Invoice.new(gateway: gateway, provider: provider)
params = {
  nota: '13114',
  motivo: 'Falha no Engano',
  email: '[email protected]'
}
invoice.build(cancel: params)
invoice.cancel!
invoice.success?
=> true
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.