nfse_sjc

Gem para comunicação via API com o sistema de NFS-e da prefeitura de São José dos Campos


License
MIT
Install
gem install nfse_sjc -v 0.1.1

Documentation

nfse-sjc

Gem para comunicação via API com o sistema de NFS-e da prefeitura de São José dos Campos

Instalação

Adicione essa linha no Gemfile de sua aplicação:

  gem 'nfse_sjc', '~> 0.1'

Em seguida, execute:

$ bundle install

Ou instale você mesmo utilizando o seguinte comando:

$ gem install nfse_sjc

Além disso, é necessário que o xmlsec esteja instalado em seu sistema e que seja compatível com a API da versão 1.2.18.

Como usar a gem

  # configuração
  NfseSjc.config do |c|
    c.wsdl                  = 'https://homologacao.ginfes.com.br/ServiceGinfesImpl?wsdl'
    c.ssl_cert_file         = 'CAMINHO_PARA_SEU_CERTIFICADO'
    c.ssl_cert_key_file     = 'CAMINHO_PARA_SUA_CHAVE_PRIVADA'
    c.ssl_cert_key_password = 'SENHA_CHAVE_PRIVADA'
    c.log                   = true
    c.pretty_print_xml      = true
    c.xmlsec_binary_path    = `which xmlsec1`.chomp
  end

  # chamada de api
  ginfes = NfseSjc::Client.new

  # enviar lote RPS
  client.recepcionar_lote_rps_v3({
    'LoteRps' => {
      'Id' => '1234',
      'NumeroLote' => '26',
      'Cnpj' => 'CNPJ_VALIDO',
      'InscricaoMunicipal' => 'IM_VALIDA',
      'ListaRps' => [
        {
          'Id' => '1234',
          'InfRps' => {
            'IdentificacaoRps' => {
              'Numero' => '2345',
              'Serie' => '3456',
              'Tipo' => '1'
            },
            'DataEmissao' => Time.now.strftime('%Y-%m-%dT%H:%M:%S'),
            'NaturezaOperacao' => '1',
            'OptanteSimplesNacional' => '2',
            'IncentivadorCultural' => '2',
            'Status' => '1', # normal
            'Servico' => {
              'Valores' => {
                'ValorServicos' => '1',
                'IssRetido' => '2'
              },
              'ItemListaServico' => '1.03',
              'CodigoTributacaoMunicipio' => '20103001',
              'Discriminacao' => 'Discriminação do serviço',
              'CodigoMunicipio' => '3549904'
            },
            'Prestador' => {
              'Cnpj' => 'CNPJ_VALIDO',
              'InscricaoMunicipal' => 'IM_VALIDA'
            },
            'Tomador' => {
              'CpfCnpj' => {
                'Cpf' => 'CPF_VALIDO'
              },
              'RazaoSocial' => 'João da Silva'
            }
          }
        }
      ]
    }
  })

  # consultar situação do lote
  ginfes.consultar_situacao_lote_rps_v3({
    'Prestador' => {
      'Cnpj' => 'CNPJ_VALIDO',
      'InscricaoMunicipal' => 'IM_VALIDA'
    },
    'Protocolo' => '5901581'
  })

  # consultar lote
  ginfes.consultar_lote_rps_v3({
    'Prestador' => {
      'Cnpj' => 'CNPJ_VALIDO',
      'InscricaoMunicipal' => 'IM_VALIDA'
    },
    'Protocolo' => '5901581'
  })

Certificado e chave

Extraindo certificado e chave privada .pem a partir do certificado .pfx

Para utilizar a gem, é necessário extrair a chave privada e o certificado (ambos em formato .pem) a partir do certificado .pfx, caso você tenha acesso somente à senha e ao .pfx.

Para extrair a chave privada:

  openssl pkcs12 -in certificado.pfx -nocerts -out chave-privada.pem

Para extrair o certificado em formato .pem:

  openssl pkcs12 -in certificado.pfx -clcerts -nokeys -out certificado.pem

TODO

  • Ao invés de referenciar o wsdl correto, referenciar se é ambiente de homologação ou produção
  • Permitir configuração de CNPJ e Inscrição Municipal
  • API mais high level (classes para resposta, etc)
  • Tentar substituir o xmlsec por uma solução mais PORO possível
  • Testes