nfse_issnet 0.1.1
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.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rspec +3 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +20 -0
- data/CODE_OF_CONDUCT.md +75 -0
- data/Dockerfile +16 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +47 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docker-compose.yml +15 -0
- data/lib/nfse_issnet.rb +74 -0
- data/lib/nfse_issnet/base.rb +72 -0
- data/lib/nfse_issnet/configuration.rb +10 -0
- data/lib/nfse_issnet/entities/base_entity.rb +11 -0
- data/lib/nfse_issnet/entities/nota_fiscal.rb +19 -0
- data/lib/nfse_issnet/entities/servico_consultar_lote_rps_envio.rb +8 -0
- data/lib/nfse_issnet/entities/servico_consultar_nfse_envio.rb +7 -0
- data/lib/nfse_issnet/entities/servico_consultar_nfse_por_rps_envio.rb +8 -0
- data/lib/nfse_issnet/entities/servico_enviar_lote_rps_envio.rb +7 -0
- data/lib/nfse_issnet/entities/tc_contato.rb +8 -0
- data/lib/nfse_issnet/entities/tc_cpf_cnpj.rb +8 -0
- data/lib/nfse_issnet/entities/tc_dados_prestador.rb +9 -0
- data/lib/nfse_issnet/entities/tc_dados_servico.rb +12 -0
- data/lib/nfse_issnet/entities/tc_dados_tomador.rb +10 -0
- data/lib/nfse_issnet/entities/tc_endereco.rb +13 -0
- data/lib/nfse_issnet/entities/tc_identificacao_intermediario_servico.rb +9 -0
- data/lib/nfse_issnet/entities/tc_identificacao_prestador.rb +8 -0
- data/lib/nfse_issnet/entities/tc_identificacao_rps.rb +9 -0
- data/lib/nfse_issnet/entities/tc_identificacao_tomador.rb +8 -0
- data/lib/nfse_issnet/entities/tc_inf_rps.rb +18 -0
- data/lib/nfse_issnet/entities/tc_lote_rps.rb +12 -0
- data/lib/nfse_issnet/entities/tc_rps.rb +7 -0
- data/lib/nfse_issnet/entities/tc_valores.rb +22 -0
- data/lib/nfse_issnet/operations/consulta_lote_rps.rb +18 -0
- data/lib/nfse_issnet/operations/consulta_nfse.rb +19 -0
- data/lib/nfse_issnet/operations/consulta_nfse_por_rps.rb +18 -0
- data/lib/nfse_issnet/operations/envia_lote_rps.rb +18 -0
- data/lib/nfse_issnet/responses/base.rb +53 -0
- data/lib/nfse_issnet/responses/consulta_lote_rps.rb +19 -0
- data/lib/nfse_issnet/responses/consulta_nfse.rb +19 -0
- data/lib/nfse_issnet/responses/consulta_nfse_por_rps.rb +19 -0
- data/lib/nfse_issnet/responses/envia_lote_rps.rb +32 -0
- data/lib/nfse_issnet/utils/assinatura.rb +36 -0
- data/lib/nfse_issnet/utils/utils.rb +19 -0
- data/lib/nfse_issnet/utils/xml.rb +32 -0
- data/lib/nfse_issnet/version.rb +3 -0
- data/lib/nfse_issnet/xml/_signed_info_sh1.xml.slim +8 -0
- data/lib/nfse_issnet/xml/_tc_contato.xml.slim +7 -0
- data/lib/nfse_issnet/xml/_tc_cpf_cnpj.xml.slim +4 -0
- data/lib/nfse_issnet/xml/_tc_dados_prestador.xml.slim +15 -0
- data/lib/nfse_issnet/xml/_tc_dados_servico.xml.slim +12 -0
- data/lib/nfse_issnet/xml/_tc_dados_tomador.xml.slim +15 -0
- data/lib/nfse_issnet/xml/_tc_endereco.xml.slim +16 -0
- data/lib/nfse_issnet/xml/_tc_identificacao_intermediario_servico.xml.slim +7 -0
- data/lib/nfse_issnet/xml/_tc_identificacao_prestador.xml.slim +4 -0
- data/lib/nfse_issnet/xml/_tc_identificacao_rps.xml.slim +3 -0
- data/lib/nfse_issnet/xml/_tc_identificacao_tomador.xml.slim +4 -0
- data/lib/nfse_issnet/xml/_tc_inf_rps.xml.slim +43 -0
- data/lib/nfse_issnet/xml/_tc_lote_rps.xml.slim +9 -0
- data/lib/nfse_issnet/xml/_tc_rps.xml.slim +7 -0
- data/lib/nfse_issnet/xml/_tc_valores.xml.slim +48 -0
- data/lib/nfse_issnet/xml/servico_consultar_lote_rps_envio.xml.slim +5 -0
- data/lib/nfse_issnet/xml/servico_consultar_nfse_envio.xml.slim +4 -0
- data/lib/nfse_issnet/xml/servico_consultar_nfse_por_rps_envio.xml.slim +6 -0
- data/lib/nfse_issnet/xml/servico_enviar_lote_rps_envio.xml.slim +9 -0
- data/lib/nfse_issnet/xml/signature_sh1.xml.slim +10 -0
- data/nfse_issnet.gemspec +55 -0
- metadata +299 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class NotaFiscal < BaseEntity
|
4
|
+
attribute :numero, Types::Coercible::Integer
|
5
|
+
attribute :servico, NfseIssnet::Entities::TcDadosServico
|
6
|
+
attribute :tomador_servico, NfseIssnet::Entities::TcDadosTomador
|
7
|
+
attribute :prestador_servico, NfseIssnet::Entities::TcDadosPrestador
|
8
|
+
attribute? :codigo_verificacao, Types::Coercible::String
|
9
|
+
attribute? :data_emissao, Types::Params::DateTime
|
10
|
+
attribute? :competencia, Types::Params::Date
|
11
|
+
attribute? :natureza_operacao, Types::Coercible::Integer
|
12
|
+
attribute? :regime_especial_tributacao, Types::Coercible::Integer
|
13
|
+
attribute? :optante_simples_nacional, Types::LeituraSimNao
|
14
|
+
attribute? :incentivador_cultural, Types::LeituraSimNao
|
15
|
+
attribute? :nfse_substituida, Types::Coercible::Integer
|
16
|
+
attribute? :outras_informacoes, Types::String
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcDadosPrestador < BaseEntity
|
4
|
+
attribute :identificacao_prestador, NfseIssnet::Entities::TcIdentificacaoPrestador
|
5
|
+
attribute? :razao_social, Types::String.constrained(max_size: 115)
|
6
|
+
attribute? :endereco, NfseIssnet::Entities::TcEndereco
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcDadosServico < BaseEntity
|
4
|
+
attribute :valores, NfseIssnet::Entities::TcValores
|
5
|
+
attribute :item_lista_servico, Types::Coercible::String.constrained(max_size: 5)
|
6
|
+
attribute :codigo_cnae, Types::Coercible::Integer.constrained(lteq: ('9' * 7).to_i)
|
7
|
+
attribute :codigo_tributacao_municipio, Types::String.constrained(max_size: 20)
|
8
|
+
attribute :discriminacao, Types::String.constrained(max_size: 2000)
|
9
|
+
attribute :municipio_prestacao_servico, Types::String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcDadosTomador < BaseEntity
|
4
|
+
attribute :identificacao_tomador, NfseIssnet::Entities::TcIdentificacaoTomador
|
5
|
+
attribute :razao_social, Types::String.constrained(max_size: 115)
|
6
|
+
attribute :endereco, NfseIssnet::Entities::TcEndereco
|
7
|
+
attribute? :contato, NfseIssnet::Entities::TcContato.optional
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcEndereco < BaseEntity
|
4
|
+
attribute? :endereco, Types::String.constrained(max_size: 125)
|
5
|
+
attribute? :cep, Types::Coercible::Integer.constrained(lteq: ('9' * 8).to_i)
|
6
|
+
attribute? :numero, Types::String.constrained(max_size: 10)
|
7
|
+
attribute? :complemento, Types::String.constrained(max_size: 60)
|
8
|
+
attribute? :bairro, Types::String.constrained(max_size: 60)
|
9
|
+
attribute? :cidade, Types::String.constrained(max_size: 7)
|
10
|
+
attribute? :estado, Types::String.constrained(max_size: 2)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcIdentificacaoIntermediarioServico < BaseEntity
|
4
|
+
attribute :cpf_cnpj, NfseIssnet::Entities::TcCpfCnpj
|
5
|
+
attribute :razao_social, Types::String.constrained(max_size: 115)
|
6
|
+
attribute? :inscricao_municipal, Types::String.constrained(max_size: 15)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcIdentificacaoRps < BaseEntity
|
4
|
+
attribute :numero, Types::Coercible::Integer.constrained(lteq: ('9' * 15).to_i)
|
5
|
+
attribute :serie, Types::Coercible::String.constrained(max_size: 5)
|
6
|
+
attribute :tipo, Types::Coercible::Integer.enum(1, 2, 3)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcInfRps < BaseEntity
|
4
|
+
attribute :identificacao_rps, NfseIssnet::Entities::TcIdentificacaoRps
|
5
|
+
attribute :data_emissao, Types::DateTime
|
6
|
+
attribute :natureza_operacao, Types::Integer.enum(1,2,3,4,5,6)
|
7
|
+
attribute? :regime_especial_tributacao, Types::Integer.enum(1,2,3,4)
|
8
|
+
attribute :optante_simples_nacional, Types::Integer.enum(1,2)
|
9
|
+
attribute :incentivador_cultural, Types::Integer.enum(1,2)
|
10
|
+
attribute :status, Types::Integer.enum(1,2)
|
11
|
+
attribute? :rps_substituido, NfseIssnet::Entities::TcIdentificacaoRps
|
12
|
+
attribute :servico, NfseIssnet::Entities::TcDadosServico
|
13
|
+
attribute :prestador, NfseIssnet::Entities::TcIdentificacaoPrestador
|
14
|
+
attribute :tomador, NfseIssnet::Entities::TcDadosTomador
|
15
|
+
attribute? :intermediario_servico, NfseIssnet::Entities::TcIdentificacaoIntermediarioServico
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcLoteRps < BaseEntity
|
4
|
+
attribute :numero_lote, Types::Integer.constrained(lteq: ('9' * 15).to_i)
|
5
|
+
attribute :cpf_cnpj, NfseIssnet::Entities::TcCpfCnpj
|
6
|
+
attribute :inscricao_municipal, Types::String.constrained(max_size: 15)
|
7
|
+
attribute :quantidade_rps, Types::Integer.constrained(lteq: ('9' * 4).to_i)
|
8
|
+
attribute :lista_rps, Types::Array.of(NfseIssnet::Entities::TcRps)
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Entities
|
3
|
+
class TcValores < BaseEntity
|
4
|
+
attribute :base_calculo, Types::Coercible::Float
|
5
|
+
attribute :valor_servicos, Types::Coercible::Float
|
6
|
+
attribute :iss_retido, Types::Coercible::Integer.enum(1,2)
|
7
|
+
attribute :aliquota, Types::Coercible::Float
|
8
|
+
attribute :valor_iss, Types::Coercible::Float
|
9
|
+
attribute? :outras_retencoes, Types::Coercible::Decimal
|
10
|
+
attribute? :valor_deducoes, Types::Coercible::Decimal
|
11
|
+
attribute? :valor_pis, Types::Coercible::Decimal
|
12
|
+
attribute? :valor_cofins, Types::Coercible::Decimal
|
13
|
+
attribute? :valor_inss, Types::Coercible::Decimal
|
14
|
+
attribute? :valor_ir, Types::Coercible::Decimal
|
15
|
+
attribute? :valor_csll, Types::Coercible::Decimal
|
16
|
+
attribute? :valor_liquido_nfse, Types::Coercible::Decimal
|
17
|
+
attribute? :valor_iss_retido, Types::Coercible::Decimal
|
18
|
+
attribute? :desconto_condicionado, Types::Coercible::Decimal
|
19
|
+
attribute? :desconto_incondicionado, Types::Coercible::Decimal
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Operations
|
3
|
+
class ConsultaLoteRps < NfseIssnet::Base
|
4
|
+
private
|
5
|
+
|
6
|
+
def configure
|
7
|
+
self.method_wsdl = :consultar_lote_rps
|
8
|
+
self.default_namespace = 'http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_lote_rps_envio.xsd'
|
9
|
+
self.template_xml = :servico_consultar_lote_rps_envio
|
10
|
+
self.entity = NfseIssnet::Entities::ServicoConsultarLoteRpsEnvio
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_response
|
14
|
+
@response = NfseIssnet::Responses::ConsultaLoteRps.new(savon_response: @original_response).response
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Operations
|
3
|
+
class ConsultaNfse < NfseIssnet::Base
|
4
|
+
private
|
5
|
+
|
6
|
+
def configure
|
7
|
+
self.method_wsdl = :consultar_nfse
|
8
|
+
self.default_namespace = 'http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_nfse_envio.xsd'
|
9
|
+
self.template_xml = :servico_consultar_nfse_envio
|
10
|
+
self.entity = NfseIssnet::Entities::ServicoConsultarNfseEnvio
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_response
|
14
|
+
@response = NfseIssnet::Responses::ConsultaNfse.new(savon_response: @original_response).response
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Operations
|
3
|
+
class ConsultaNfsePorRps < NfseIssnet::Base
|
4
|
+
private
|
5
|
+
|
6
|
+
def configure
|
7
|
+
self.method_wsdl = :consulta_nf_se_por_rps
|
8
|
+
self.default_namespace = 'http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_nfse_rps_envio.xsd'
|
9
|
+
self.template_xml = :servico_consultar_nfse_por_rps_envio
|
10
|
+
self.entity = NfseIssnet::Entities::ServicoConsultarNfsePorRpsEnvio
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_response
|
14
|
+
@response = NfseIssnet::Responses::ConsultaNfsePorRps.new(savon_response: @original_response).response
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Operations
|
3
|
+
class EnviaLoteRps < NfseIssnet::Base
|
4
|
+
private
|
5
|
+
|
6
|
+
def configure
|
7
|
+
self.method_wsdl = :recepcionar_lote_rps
|
8
|
+
self.default_namespace = 'http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_enviar_lote_rps_envio.xsd'
|
9
|
+
self.template_xml = :servico_enviar_lote_rps_envio
|
10
|
+
self.entity = NfseIssnet::Entities::ServicoEnviarLoteRpsEnvio
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_response
|
14
|
+
@response = NfseIssnet::Responses::EnviaLoteRps.new(savon_response: @original_response).response
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Responses
|
3
|
+
class Base
|
4
|
+
attr_accessor :savon_response,:savon_body
|
5
|
+
attr_accessor :keys_root_path, :notas_fiscais_path, :errors_path
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
attributes = default_values.merge!(attributes)
|
9
|
+
assign_attributes(attributes)
|
10
|
+
convert_body_to_hash
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
def default_values
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
|
19
|
+
def notas_fiscais
|
20
|
+
@notas_fiscais ||= pega_itens(notas_fiscais_path).map { |nfs| NfseIssnet::Entities::NotaFiscal.new(nfs[:nfse][:inf_nfse]) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def erros
|
24
|
+
@erros ||= pega_itens(errors_path).map { |erro| erro[:mensagem_retorno] }
|
25
|
+
end
|
26
|
+
|
27
|
+
def pega_itens(path)
|
28
|
+
itens = []
|
29
|
+
_itens= savon_body.dig(*path)
|
30
|
+
if _itens.is_a?(Hash)
|
31
|
+
itens << _itens
|
32
|
+
elsif _itens.is_a?(Array)
|
33
|
+
_itens.map{|inv| itens << inv }
|
34
|
+
end
|
35
|
+
itens
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def assign_attributes(attributes)
|
41
|
+
attributes ||= {}
|
42
|
+
attributes.each do |name, value|
|
43
|
+
send("#{name}=", value)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def convert_body_to_hash
|
48
|
+
ep = lambda { |key| Utils::Utils.snakecase(key).to_sym }
|
49
|
+
self.savon_body ||= Ox.load(savon_response.body.dig(*keys_root_path), mode: :hash_no_attrs, strip_namespace: true, element_key_mod: ep)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Responses
|
3
|
+
class ConsultaLoteRps < Base
|
4
|
+
def response
|
5
|
+
OpenStruct.new(notas_fiscais: notas_fiscais, erros: erros)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def default_values
|
11
|
+
super.merge({
|
12
|
+
keys_root_path: [:consultar_lote_rps_response, :consultar_lote_rps_result],
|
13
|
+
errors_path: [:consultar_lote_rps_resposta, :lista_mensagem_retorno],
|
14
|
+
notas_fiscais_path: [:consultar_lote_rps_resposta, :lista_nfse, :comp_nfse],
|
15
|
+
})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Responses
|
3
|
+
class ConsultaNfse < Base
|
4
|
+
def response
|
5
|
+
OpenStruct.new(notas_fiscais: notas_fiscais, error_messages: erros)
|
6
|
+
end
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def default_values
|
11
|
+
super.merge({
|
12
|
+
keys_root_path: [:consultar_nfse_response, :consultar_nfse_result],
|
13
|
+
errors_path: [:consultar_nfse_rps_resposta, :lista_mensagem_retorno],
|
14
|
+
notas_fiscais_path: [:consultar_nfse_resposta, :lista_nfse, :comp_nfse],
|
15
|
+
})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NfseIssnet
|
2
|
+
module Responses
|
3
|
+
class ConsultaNfsePorRps < Base
|
4
|
+
def response
|
5
|
+
OpenStruct.new(notas_fiscais: notas_fiscais, error_messages: erros)
|
6
|
+
end
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def default_values
|
11
|
+
super.merge({
|
12
|
+
keys_root_path: [:consulta_nf_se_por_rps_response, :consulta_nf_se_por_rps_result],
|
13
|
+
errors_path: [:consultar_nfse_rps_resposta, :lista_mensagem_retorno],
|
14
|
+
notas_fiscais_path: [:consultar_nfse_rps_resposta, :comp_nfse],
|
15
|
+
})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|