nfse-carioca 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Berksfile +6 -0
  4. data/Berksfile.lock +28 -0
  5. data/README.md +1 -0
  6. data/Rakefile +3 -7
  7. data/Vagrantfile +58 -0
  8. data/lib/nfse_carioca.rb +5 -12
  9. data/lib/nfse_carioca/cancelar_nfse.rb +28 -22
  10. data/lib/nfse_carioca/client.rb +31 -0
  11. data/lib/nfse_carioca/configuration.rb +49 -7
  12. data/lib/nfse_carioca/gerar_nfse.rb +14 -23
  13. data/lib/nfse_carioca/gerar_nfse_xml.rb +49 -103
  14. data/lib/nfse_carioca/response.rb +27 -0
  15. data/lib/nfse_carioca/version.rb +2 -2
  16. data/nfse_carioca.gemspec +4 -4
  17. data/spec/fixtures/vcr_cassettes/NFSeCarioca_CancelarNFSe/_execute_/when_NFSeCarioca_rps_number_does_not_exist/returns_error_message.yml +253 -0
  18. data/spec/fixtures/vcr_cassettes/NFSeCarioca_CancelarNFSe/_execute_/when_NFSeCarioca_rps_number_does_not_exist/returns_false.yml +253 -0
  19. data/spec/fixtures/vcr_cassettes/NFSeCarioca_CancelarNFSe/_execute_/when_NFSeCarioca_rps_number_exist/returns_false.yml +238 -0
  20. data/spec/fixtures/vcr_cassettes/NFSeCarioca_GerarNFSe/_call/when_NFSeCarioca_rps_number_already_exist/responds_with_error.yml +296 -0
  21. data/spec/fixtures/vcr_cassettes/NFSeCarioca_GerarNFSe/_call/when_NFSeCarioca_rps_number_already_exist/responds_with_message_error_E10_.yml +296 -0
  22. data/spec/fixtures/vcr_cassettes/NFSeCarioca_GerarNFSe/_call/when_NFSeCarioca_rps_number_does_not_exist_yet/generates_NFSeCarioca.yml +340 -0
  23. data/spec/lib/nfse_carioca/cancelar_nfse_spec.rb +13 -21
  24. data/spec/lib/nfse_carioca/configuration_spec.rb +26 -26
  25. data/spec/lib/nfse_carioca/gerar_nfse_spec.rb +31 -34
  26. data/spec/spec_helper.rb +7 -0
  27. metadata +40 -38
  28. data/CHANGELOG.md +0 -7
  29. data/CONTRIBUTING.md +0 -35
  30. data/lib/nfse_carioca/cancelar_nfse_xml.rb +0 -31
  31. data/lib/nfse_carioca/models/address.rb +0 -13
  32. data/lib/nfse_carioca/models/customer.rb +0 -15
  33. data/lib/nfse_carioca/models/invoice.rb +0 -14
  34. data/lib/nfse_carioca/models/provider.rb +0 -9
  35. data/lib/nfse_carioca/nota_carioca_client.rb +0 -31
  36. data/lib/nfse_carioca/nota_carioca_response.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59ed7774a62b9a4a6c1b266f9226c4cb4db1f6be
4
- data.tar.gz: 5b882e9110d20068c1d10e8520c1f03bff1f2c01
3
+ metadata.gz: 188d9a3bce745db419598495e1a2025bd8107349
4
+ data.tar.gz: 7743636c121b697b78bd5347c7ca07305e199fe5
5
5
  SHA512:
6
- metadata.gz: b1212ac5ff1c62b666840cda48d8a97da9ada307f9284705b7f8b15afd6e4beec735dd0dbf37d66bbb4ba719ca283f4e99f8b56915cf11f555e08a5e3671c03e
7
- data.tar.gz: 2701cdf0f3daf9806b7b2a325031b16ad6492b6d56fc5c78503a2375a3710a25c74c0512a1b408a6c1f54c48fafaae17ce8e9abd9bccc6d2134077cca476da7a
6
+ metadata.gz: 5417a886e8a3613b83328b1ae305fa79881fedce1f4333cc0a99b70dab7284b8a27f962c5f5a0a469bbd256d8b0071f25b74bb71ed8b059e7aac168e0f25f06e
7
+ data.tar.gz: 912114d537b3da636af6a96fd7233232c64074ecfa696a277e6c5706fd3dbd9087a240c2ebb265176971f4400857dc98b2aa499a67d5423737662d6c04132aa2
data/.gitignore CHANGED
@@ -15,6 +15,7 @@ mkmf.log
15
15
  .vagrant
16
16
  *.pem
17
17
  *.pfx
18
+ *.gem
18
19
 
19
20
  .ruby-version
20
21
  .ruby-gemset
data/Berksfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://api.berkshelf.com"
2
+
3
+ cookbook "apt"
4
+ cookbook "brightbox", git: "git://github.com/bubble-cookbooks/brightbox.git"
5
+ cookbook "timezone", git: "git://github.com/winhamwr/chef-timezone.git"
6
+ cookbook "oh_my_zsh", git: "git://github.com/tdtadeu/oh-my-zsh-chef.git"
data/Berksfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ DEPENDENCIES
2
+ apt
3
+ brightbox
4
+ git: git://github.com/bubble-cookbooks/brightbox.git
5
+ revision: 85d6edf7962db148921f6ddad620709ea22aa85b
6
+ git
7
+ git: git://github.com/tdtadeu/git.git
8
+ revision: 4d9c09a9863a72fe745e1aa7eda9a61b18f8e237
9
+ oh_my_zsh
10
+ git: git://github.com/tdtadeu/oh-my-zsh-chef.git
11
+ revision: e46eb56951ca92a2dd4e5a10c6a19cbad5a2ee8f
12
+ timezone
13
+ git: git://github.com/winhamwr/chef-timezone.git
14
+ revision: 2e8e32dfcc8c70964d7d77de0eb503510c2f6c24
15
+
16
+ GRAPH
17
+ apt (2.6.1)
18
+ brightbox (0.1.2)
19
+ apt (>= 0.0.0)
20
+ build-essential (>= 0.0.0)
21
+ build-essential (2.1.3)
22
+ git (0.2.3)
23
+ apt (>= 0.0.0)
24
+ oh_my_zsh (0.0.7)
25
+ git (>= 0.0.0)
26
+ zsh (>= 0.0.0)
27
+ timezone (0.0.1)
28
+ zsh (1.0.1)
data/README.md CHANGED
@@ -43,6 +43,7 @@ end
43
43
  infos = {
44
44
  identification_number: "01",
45
45
  description: "Venda do Serviço XYZ.",
46
+ total_price: 12.0,
46
47
  provider: {
47
48
  cnpj: "11199990000111",
48
49
  inscricao_municipal: "04807995"
data/Rakefile CHANGED
@@ -1,11 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
- begin
4
- require 'rspec/core/rake_task'
3
+ require 'rspec/core/rake_task'
5
4
 
6
- RSpec::Core::RakeTask.new(:spec)
5
+ RSpec::Core::RakeTask.new(:spec)
7
6
 
8
- task :default => :spec
9
- rescue LoadError
10
- # no rspec available
11
- end
7
+ task :default => :spec
data/Vagrantfile ADDED
@@ -0,0 +1,58 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ VAGRANTFILE_API_VERSION = "2"
5
+
6
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
7
+ config.vm.box = "ubuntu/trusty64"
8
+ config.vm.network :private_network, ip: "10.20.30.40"
9
+ config.ssh.forward_agent = true
10
+ config.vm.synced_folder ".", "/vagrant", nfs: true
11
+ config.vm.boot_timeout = 120
12
+
13
+ config.omnibus.chef_version = :latest
14
+ config.berkshelf.enabled = true
15
+
16
+ config.vm.provider "virtualbox" do |v|
17
+ host = RbConfig::CONFIG['host_os']
18
+ if host =~ /darwin/
19
+ cpus = `sysctl -n hw.ncpu`.to_i
20
+ mem = `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 2
21
+ else
22
+ cpus = `nproc`.to_i
23
+ mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 2
24
+ end
25
+
26
+ v.customize ["modifyvm", :id, "--memory", mem]
27
+ v.customize ["modifyvm", :id, "--cpus", cpus]
28
+ end
29
+
30
+ config.vm.provision :chef_solo do |chef|
31
+ chef.add_recipe "apt"
32
+ chef.add_recipe "timezone"
33
+
34
+ chef.add_recipe "brightbox"
35
+ chef.add_recipe "brightbox::xml"
36
+ chef.add_recipe "oh_my_zsh"
37
+
38
+ chef.json = {
39
+ 'timezone' => {
40
+ 'zone' => 'America/Sao_Paulo'
41
+ },
42
+
43
+ 'brightbox' => {
44
+ 'version' => 'ruby2.2'
45
+ },
46
+
47
+ 'oh_my_zsh' => {
48
+ 'users' => ['vagrant'],
49
+ 'theme' => 'clean',
50
+ 'platform' => 'ubuntu'
51
+ },
52
+
53
+ 'bundle' => {
54
+ 'users' => ['vagrant']
55
+ }
56
+ }
57
+ end
58
+ end
data/lib/nfse_carioca.rb CHANGED
@@ -1,28 +1,21 @@
1
1
  require "ostruct"
2
- require "virtus"
3
- require 'active_support/core_ext/hash'
4
2
  require "nfse_carioca/version"
5
3
  require "nfse_carioca/configuration"
6
- require "nfse_carioca/nota_carioca_client"
7
- require "nfse_carioca/models/invoice"
4
+ require "nfse_carioca/client"
5
+ require "nfse_carioca/response"
8
6
  require "nfse_carioca/gerar_nfse"
9
7
  require "nfse_carioca/cancelar_nfse"
10
8
 
11
- module NFSeCarioca
12
-
9
+ module NfseCarioca
13
10
  def self.configure(&block)
14
11
  yield configuration
15
12
  end
16
13
 
17
14
  def self.configuration
18
- @configuration ||= NFSeCarioca::Configuration.instance
19
- end
20
-
21
- def self.method_missing(method, *args)
22
- configuration.send("#{method}")
15
+ @configuration ||= NfseCarioca::Configuration.new
23
16
  end
24
17
 
25
- def self.reset
18
+ def self.reset!
26
19
  @configuration = nil
27
20
  end
28
21
  end
@@ -1,36 +1,42 @@
1
- require "nfse_carioca/nota_carioca_response"
2
- require "nfse_carioca/cancelar_nfse_xml"
1
+ module NfseCarioca
2
+ class CancelarNfse
3
+ attr_reader :invoice_number
3
4
 
4
- module NFSeCarioca
5
- class CancelarNFSe < NotaCariocaClient
6
-
7
- def initialize(params={})
8
- @params = params
5
+ def initialize(invoice_number)
6
+ @invoice_number = invoice_number
9
7
  end
10
8
 
11
9
  def execute!
12
- Response.new(call(:cancelar_nfse, nfse_xml))
13
- end
14
-
15
- private
16
-
17
- def nfse_xml
18
- CancelarNFSeXML.new(@params).to_xml
10
+ client.call(:cancelar_nfse, self)
19
11
  end
20
12
 
21
- class Response < NotaCariocaResponse
22
- def output_xml
23
- @output_xml ||= @response.hash[:envelope][:body][:cancelar_nfse_response][:output_xml]
13
+ def to_xml
14
+ xml = Builder::XmlMarkup.new(indent: 2)
15
+ xml.instruct!
16
+ xml.CancelarNfseEnvio(xmlns: "http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd") do |cancelar_nfse_envio|
17
+ cancelar_nfse_envio.Pedido(xmlns: "http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd") do |pedido|
18
+ pedido.InfPedidoCancelamento(Id: "Cancelamento_NF#{invoice_number}") do |inf_pedido_cancelamento|
19
+ inf_pedido_cancelamento.IdentificacaoNfse do |identificacao_nfse|
20
+ identificacao_nfse.Numero invoice_number
21
+ identificacao_nfse.Cnpj NfseCarioca.configuration.cnpj
22
+ identificacao_nfse.InscricaoMunicipal NfseCarioca.configuration.inscricao_municipal
23
+ identificacao_nfse.CodigoMunicipio NfseCarioca.configuration.codigo_municipio
24
+ end
25
+ inf_pedido_cancelamento.CodigoCancelamento "0"
26
+ end
27
+ end
24
28
  end
29
+ end
25
30
 
26
- def success?
27
- nota_carioca_xml["CancelarNfseResposta"]["Cancelamento"]["Confirmacao"].present? rescue false
28
- end
31
+ private
32
+ def client
33
+ NfseCarioca::Client.new
34
+ end
29
35
 
36
+ class Response < NfseCarioca::Response
30
37
  def error_message
31
- nota_carioca_xml["CancelarNfseResposta"]["ListaMensagemRetorno"]["MensagemRetorno"]["Correcao"] unless success?
38
+ content["ListaMensagemRetorno"]["MensagemRetorno"]["Correcao"] if error?
32
39
  end
33
-
34
40
  end
35
41
  end
36
42
  end
@@ -0,0 +1,31 @@
1
+ require "savon"
2
+
3
+ module NfseCarioca
4
+ class Client
5
+ def call(method, object)
6
+ payload = client.call(method, message: { inputXML: object.to_xml })
7
+ object.class::Response.new payload
8
+ end
9
+
10
+ private
11
+
12
+ def client
13
+ Savon.client({
14
+ wsdl: NfseCarioca.configuration.wsdl,
15
+ env_namespace: :soap,
16
+ namespace_identifier: nil,
17
+ element_form_default: :unqualified,
18
+ ssl_verify_mode: :none,
19
+ ssl_version: :SSLv3,
20
+ ssl_cert_file: NfseCarioca.configuration.cert_path,
21
+ ssl_cert_key_file: NfseCarioca.configuration.cert_key_path,
22
+ ssl_ca_cert_file: NfseCarioca.configuration.ca_cert_path,
23
+ ssl_cert_key_password: NfseCarioca.configuration.cert_key_password,
24
+ log_level: NfseCarioca.configuration.log_level,
25
+ log: true,
26
+ open_timeout: 120,
27
+ read_timeout: 120
28
+ })
29
+ end
30
+ end
31
+ end
@@ -1,14 +1,56 @@
1
- module NFSeCarioca
1
+ module NfseCarioca
2
2
  class Configuration
3
- include Singleton
4
3
 
5
4
  attr_accessor :test_mode,
6
- :ca_cert_pem_path,
7
- :cert_key_pem_path,
8
- :cert_pem_path,
9
- :ssl_cert_key_password
5
+ :log_level,
6
+ :ca_cert_path,
7
+ :cert_key_path,
8
+ :cert_path,
9
+ :cert_key_password,
10
+ :cnpj,
11
+ :inscricao_municipal,
12
+ :codigo_municipio,
13
+ :rps_serie,
14
+ :rps_tipo,
15
+ :rps_natureza_operacao,
16
+ :rps_optante_simples_nacional,
17
+ :rps_incentivador_cultural,
18
+ :iss_retido,
19
+ :valor_aliquota,
20
+ :valor_pis,
21
+ :valor_cofins,
22
+ :valor_inss,
23
+ :valor_ir,
24
+ :valor_csll,
25
+ :valor_iss,
26
+ :item_lista_servico,
27
+ :codigo_tributacao_municipio
10
28
 
11
- def nota_carioca_wsdl_url
29
+ def initialize
30
+ @test_mode = false
31
+ @log_level = :error
32
+
33
+ @codigo_municipio = "3304557"
34
+ @rps_serie = "A"
35
+ @rps_tipo = 1
36
+ @rps_natureza_operacao = 1
37
+ @rps_optante_simples_nacional = 1
38
+ @rps_incentivador_cultural = 2
39
+
40
+ @iss_retido = 2
41
+ @valor_aliquota = 0
42
+ @valor_pis = 0
43
+ @valor_cofins = 0
44
+ @valor_inss = 0
45
+ @valor_ir = 0
46
+ @valor_csll = 0
47
+ @valor_iss = 0
48
+
49
+ @item_lista_servico = "0105"
50
+ @codigo_tributacao_municipio = "010501"
51
+ end
52
+
53
+ def wsdl
12
54
  if test_mode
13
55
  "https://homologacao.notacarioca.rio.gov.br/WSNacional/nfse.asmx?wsdl"
14
56
  else
@@ -1,48 +1,39 @@
1
- require "nfse_carioca/nota_carioca_response"
2
1
  require "nfse_carioca/gerar_nfse_xml"
3
2
 
4
- module NFSeCarioca
5
- class GerarNFSe < NotaCariocaClient
6
-
3
+ module NfseCarioca
4
+ class GerarNfse
7
5
  def initialize(invoice)
8
6
  @invoice = invoice
9
7
  end
10
8
 
11
9
  def execute!
12
- Response.new(call(:gerar_nfse, nfse_xml))
10
+ client.call(:gerar_nfse, self)
13
11
  end
14
12
 
15
- def nfse_xml
16
- GerarNFSeXML.new(@invoice).to_xml
13
+ def to_xml
14
+ GerarNfseXML.new(@invoice).to_xml
17
15
  end
18
16
 
19
- class Response < NFSeCarioca::NotaCariocaResponse
20
- def output_xml
21
- @output_xml ||= @response.hash[:envelope][:body][:gerar_nfse_response][:output_xml]
22
- end
17
+ private
18
+ def client
19
+ NfseCarioca::Client.new
20
+ end
23
21
 
22
+ class Response < NfseCarioca::Response
24
23
  def number
25
- nota_carioca_xml["GerarNfseResposta"]["CompNfse"]["Nfse"]["InfNfse"]["Numero"] rescue nil
24
+ content["CompNfse"]["Nfse"]["InfNfse"]["Numero"] if success?
26
25
  end
27
26
 
28
27
  def verification_code
29
- nota_carioca_xml["GerarNfseResposta"]["CompNfse"]["Nfse"]["InfNfse"]["CodigoVerificacao"] rescue nil
28
+ content["CompNfse"]["Nfse"]["InfNfse"]["CodigoVerificacao"] if success?
30
29
  end
31
30
 
32
31
  def issued_at
33
- nota_carioca_xml["GerarNfseResposta"]["CompNfse"]["Nfse"]["InfNfse"]["DataEmissao"] rescue nil
34
- end
35
-
36
- def error?
37
- !nota_carioca_xml["GerarNfseResposta"]["ListaMensagemRetorno"].nil?
32
+ content["CompNfse"]["Nfse"]["InfNfse"]["DataEmissao"] if success?
38
33
  end
39
34
 
40
35
  def error_message
41
- nota_carioca_xml["GerarNfseResposta"]["ListaMensagemRetorno"]["MensagemRetorno"]["Mensagem"] if error?
42
- end
43
-
44
- def success?
45
- !error?
36
+ content["ListaMensagemRetorno"]["MensagemRetorno"]["Mensagem"] if error?
46
37
  end
47
38
  end
48
39
  end
@@ -1,122 +1,68 @@
1
- module NFSeCarioca
2
- class GerarNFSeXML
3
- SERVICO_CODIGO_MUNICIPIO = {
4
- RIO_DE_JANEIRO: "3304557"
5
- }
6
-
7
- RPS_SERIE = "A"
8
-
9
- RPS_TIPO = {
10
- RPS: 1
11
- }
12
-
13
- RPS_NATUREZA_OPERACAO = {
14
- TRIBUTACAO_NO_MUNICIPIO: 1
15
- }
16
-
17
- RPS_OPTANTE_SIMPLES_NACIONAL = {
18
- SIM: 1
19
- }
20
-
21
- RPS_INCENTIVADOR_CULTURAL = {
22
- NAO: 2
23
- }
24
-
25
- RPS_STATUS = {
26
- NORMAL: 1,
27
- CANCELADO: 2
28
- }
29
-
30
-
31
- PROCON_DETAILS = <<-DESCRIPTION
32
- Procon:
33
- Telefone: 151
34
- Endereço 1: Rua da Ajuda nº 5 subsolo - Centro
35
- Endereço 2: Praça Cristiano Ottoni s/nº subsolo Ed. D. Pedro II Central do Brasil
36
- Rio de janeiro RJ cep: 20221-250
37
- Comissão de defesa do consumidor da Alerj
38
- Telefone: 08002827060
39
- Endereço: Rua da Alfandega nº 08 Térreo, Centro
40
- Rio de janeiro - RJ Cep 20070-000
41
- DESCRIPTION
42
-
43
- VALOR_ISS_RETIDO = {
44
- NAO: 2
45
- }
46
-
47
- VALOR_ALIQUOTA = "0.05"
48
- VALOR_PIS = 0
49
- VALOR_COFINS = 0
50
- VALOR_INSS = 0
51
- VALOR_IR = 0
52
- VALOR_CSLL = 0
53
- VALOR_ISS = 0
54
-
55
- def initialize(invoice)
56
- @invoice = invoice
1
+ module NfseCarioca
2
+ class GerarNfseXML
3
+ def initialize(invoice_info)
4
+ @invoice = invoice_info
57
5
  end
58
6
 
59
7
  def to_xml
60
8
  xml = Builder::XmlMarkup.new(indent: 2)
61
9
  xml.instruct!
62
- xml.tag!("GerarNfseEnvio", xmlns: "http://notacarioca.rio.gov.br/WSNacional/XSD/1/nfse_pcrj_v01.xsd") do |xml|
63
- xml.tag!("Rps") do |xml|
64
- xml.tag!("InfRps", xmlns: "http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd", Id: @invoice.identification_number) do |xml|
65
- xml.tag!("IdentificacaoRps") do |xml|
66
- xml.tag!("Numero", @invoice.identification_number)
67
- xml.tag!("Serie", RPS_SERIE)
68
- xml.tag!("Tipo", RPS_TIPO[:RPS])
10
+ xml.GerarNfseEnvio(xmlns: "http://notacarioca.rio.gov.br/WSNacional/XSD/1/nfse_pcrj_v01.xsd") do |gerar_nfse_envio|
11
+ gerar_nfse_envio.Rps do |rps|
12
+ rps.InfRps(xmlns: "http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd", Id: @invoice[:identification_number]) do |inf_rps|
13
+ inf_rps.IdentificacaoRps do |identificacao_rps|
14
+ identificacao_rps.Numero @invoice[:identification_number]
15
+ identificacao_rps.Serie NfseCarioca.configuration.rps_serie
16
+ identificacao_rps.Tipo NfseCarioca.configuration.rps_tipo
69
17
  end
70
- xml.tag!("DataEmissao", issued_at)
71
- xml.tag!("NaturezaOperacao", RPS_NATUREZA_OPERACAO[:TRIBUTACAO_NO_MUNICIPIO])
72
- xml.tag!("OptanteSimplesNacional", RPS_OPTANTE_SIMPLES_NACIONAL[:SIM])
73
- xml.tag!("IncentivadorCultural", RPS_INCENTIVADOR_CULTURAL[:NAO])
74
- xml.tag!("Status", RPS_STATUS[:NORMAL])
75
- xml.tag!("Servico") do |xml|
76
- xml.tag!("Valores") do |xml|
77
- xml.tag!("ValorServicos", 0.1)
78
- xml.tag!("ValorPis", VALOR_PIS)
79
- xml.tag!("ValorCofins", VALOR_COFINS)
80
- xml.tag!("ValorInss", VALOR_INSS)
81
- xml.tag!("ValorIr", VALOR_IR)
82
- xml.tag!("ValorCsll", VALOR_CSLL)
83
- xml.tag!("IssRetido", VALOR_ISS_RETIDO[:NAO])
84
- xml.tag!("ValorIss", VALOR_ISS)
85
- xml.tag!("Aliquota", VALOR_ALIQUOTA)
18
+
19
+ inf_rps.DataEmissao Time.now.strftime("%Y-%m-%dT%H:%M:%S")
20
+ inf_rps.NaturezaOperacao NfseCarioca.configuration.rps_natureza_operacao
21
+ inf_rps.OptanteSimplesNacional NfseCarioca.configuration.rps_optante_simples_nacional
22
+ inf_rps.IncentivadorCultural NfseCarioca.configuration.rps_incentivador_cultural
23
+ inf_rps.Status 1
24
+ inf_rps.Servico do |servico|
25
+ servico.Valores do |valores|
26
+ valores.ValorServicos @invoice[:total]
27
+ valores.ValorPis NfseCarioca.configuration.valor_pis
28
+ valores.ValorCoffss NfseCarioca.configuration.valor_cofins
29
+ valores.ValorInss NfseCarioca.configuration.valor_inss
30
+ valores.ValorIr NfseCarioca.configuration.valor_ir
31
+ valores.ValorCsll NfseCarioca.configuration.valor_csll
32
+ valores.IssRetido NfseCarioca.configuration.iss_retido
33
+ valores.ValorIss NfseCarioca.configuration.valor_iss
34
+ valores.Aliquota NfseCarioca.configuration.valor_aliquota
86
35
  end
87
- xml.tag!("ItemListaServico", "0105")
88
- xml.tag!("CodigoTributacaoMunicipio", "010501")
89
- xml.tag!("Discriminacao", "#{@invoice.description}\n\n#{PROCON_DETAILS}")
90
- xml.tag!("CodigoMunicipio", SERVICO_CODIGO_MUNICIPIO[:RIO_DE_JANEIRO])
36
+ servico.ItemListaServico NfseCarioca.configuration.item_lista_servico
37
+ servico.CodigoTributacaoMunicipio NfseCarioca.configuration.codigo_tributacao_municipio
38
+ servico.Discriminacao @invoice[:description]
39
+ servico.CodigoMunicipio NfseCarioca.configuration.codigo_municipio
91
40
  end
92
- xml.tag!("Prestador") do |xml|
93
- xml.tag!("Cnpj", @invoice.provider.cnpj)
94
- xml.tag!("InscricaoMunicipal", @invoice.provider.inscricao_municipal)
41
+ inf_rps.Prestador do |prestador|
42
+ prestador.Cnpj NfseCarioca.configuration.cnpj
43
+ prestador.InscricaoMunicipal NfseCarioca.configuration.inscricao_municipal
95
44
  end
96
- xml.tag!("Tomador") do |xml|
97
- xml.tag!("IdentificacaoTomador") do |xml|
98
- xml.tag!("CpfCnpj") do |xml|
99
- xml.tag!(@invoice.customer.kind, @invoice.customer.code)
45
+
46
+ inf_rps.Tomador do |tomador|
47
+ tomador.IdentificacaoTomador do |identificacao_tomador|
48
+ identificacao_tomador.CpfCnpj do |cpf_cnpj|
49
+ cpf_cnpj.tag!(@invoice[:customer][:document_type], @invoice[:customer][:document_number])
100
50
  end
101
51
  end
102
- xml.tag!("RazaoSocial", @invoice.customer.full_name)
103
- xml.tag!("Endereco") do |xml|
104
- xml.tag!("Endereco", @invoice.customer.address.street)
105
- xml.tag!("Numero", @invoice.customer.address.number)
106
- xml.tag!("Complemento", @invoice.customer.address.complement)
107
- xml.tag!("Bairro", @invoice.customer.address.neighborhood)
108
- xml.tag!("CodigoMunicipio", @invoice.customer.address.city_ibge_code)
109
- xml.tag!("Uf", @invoice.customer.address.state_code)
110
- xml.tag!("Cep", @invoice.customer.address.zipcode)
52
+ tomador.RazaoSocial @invoice[:customer][:name]
53
+ tomador.Endereco do |endereco|
54
+ endereco.Endereco @invoice[:customer][:address][:street]
55
+ endereco.Numero @invoice[:customer][:address][:number]
56
+ endereco.Complemento @invoice[:customer][:address][:complement]
57
+ endereco.Bairro @invoice[:customer][:address][:neighborhood]
58
+ endereco.CodigoMunicipio @invoice[:customer][:address][:city_ibge_code]
59
+ endereco.Uf @invoice[:customer][:address][:state_code]
60
+ endereco.Cep @invoice[:customer][:address][:zipcode]
111
61
  end
112
62
  end
113
63
  end
114
64
  end
115
65
  end
116
66
  end
117
-
118
- def issued_at
119
- Time.now.strftime("%Y-%m-%dT%H:%M:%S")
120
- end
121
67
  end
122
68
  end