br_nfe 1.0.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 (93) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +15 -0
  3. data/Gemfile.lock +169 -0
  4. data/LICENSE +20 -0
  5. data/README.markdown +6 -0
  6. data/Rakefile +13 -0
  7. data/br_nfe.gemspec +28 -0
  8. data/lib/br_nfe/active_model_base.rb +62 -0
  9. data/lib/br_nfe/base.rb +168 -0
  10. data/lib/br_nfe/condicao_pagamento.rb +26 -0
  11. data/lib/br_nfe/destinatario.rb +26 -0
  12. data/lib/br_nfe/emitente.rb +40 -0
  13. data/lib/br_nfe/endereco.rb +44 -0
  14. data/lib/br_nfe/helper/cpf_cnpj.rb +60 -0
  15. data/lib/br_nfe/helper/have_address.rb +29 -0
  16. data/lib/br_nfe/helper/have_condicao_pagamento.rb +24 -0
  17. data/lib/br_nfe/helper/have_destinatario.rb +18 -0
  18. data/lib/br_nfe/helper/have_emitente.rb +20 -0
  19. data/lib/br_nfe/helper/have_intermediario.rb +24 -0
  20. data/lib/br_nfe/helper/have_rps.rb +27 -0
  21. data/lib/br_nfe/helper/string_methods.rb +21 -0
  22. data/lib/br_nfe/seed.rb +195 -0
  23. data/lib/br_nfe/servico/base.rb +35 -0
  24. data/lib/br_nfe/servico/betha/base.rb +74 -0
  25. data/lib/br_nfe/servico/betha/v1/build_response.rb +219 -0
  26. data/lib/br_nfe/servico/betha/v1/cancelamento_nfs.rb +52 -0
  27. data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +31 -0
  28. data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +34 -0
  29. data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +50 -0
  30. data/lib/br_nfe/servico/betha/v1/consulta_situacao_lote_rps.rb +18 -0
  31. data/lib/br_nfe/servico/betha/v1/gateway.rb +115 -0
  32. data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +89 -0
  33. data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +25 -0
  34. data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +27 -0
  35. data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +27 -0
  36. data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +26 -0
  37. data/lib/br_nfe/servico/betha/v2/gateway.rb +198 -0
  38. data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +25 -0
  39. data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +47 -0
  40. data/lib/br_nfe/servico/betha/v2/response.rb +23 -0
  41. data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +39 -0
  42. data/lib/br_nfe/servico/intermediario.rb +17 -0
  43. data/lib/br_nfe/servico/response/default.rb +34 -0
  44. data/lib/br_nfe/servico/response/nota_fiscal.rb +73 -0
  45. data/lib/br_nfe/servico/rps.rb +103 -0
  46. data/lib/br_nfe/version.rb +8 -0
  47. data/lib/br_nfe.rb +146 -0
  48. data/test/br_nfe/base_test.rb +274 -0
  49. data/test/br_nfe/condicao_pagamento_test.rb +23 -0
  50. data/test/br_nfe/destinatario_test.rb +26 -0
  51. data/test/br_nfe/emitente_test.rb +26 -0
  52. data/test/br_nfe/endereco_test.rb +50 -0
  53. data/test/br_nfe/helper/have_address_test.rb +62 -0
  54. data/test/br_nfe/helper/have_condicao_pagamento_test.rb +71 -0
  55. data/test/br_nfe/helper/have_destinatario_test.rb +64 -0
  56. data/test/br_nfe/helper/have_emitente_test.rb +63 -0
  57. data/test/br_nfe/helper/have_intermediario_test.rb +77 -0
  58. data/test/br_nfe/helper/have_rps_test.rb +59 -0
  59. data/test/br_nfe/servico/base_test.rb +23 -0
  60. data/test/br_nfe/servico/betha/base_test.rb +106 -0
  61. data/test/br_nfe/servico/betha/v1/build_response_test.rb +558 -0
  62. data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +62 -0
  63. data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +42 -0
  64. data/test/br_nfe/servico/betha/v1/consulta_nfs_por_rps_test.rb +68 -0
  65. data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +57 -0
  66. data/test/br_nfe/servico/betha/v1/consulta_situacao_lote_rps_test.rb +27 -0
  67. data/test/br_nfe/servico/betha/v1/gateway_test.rb +174 -0
  68. data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +235 -0
  69. data/test/br_nfe/servico/response/default_test.rb +54 -0
  70. data/test/br_nfe/servico/response/nota_fiscal_test.rb +41 -0
  71. data/test/br_nfe/servico/rps_test.rb +214 -0
  72. data/test/certificado.rb +12 -0
  73. data/test/factories/base.rb +5 -0
  74. data/test/factories/condicao_pagamento.rb +10 -0
  75. data/test/factories/destinatario.rb +11 -0
  76. data/test/factories/emitente.rb +15 -0
  77. data/test/factories/endereco.rb +12 -0
  78. data/test/factories/servico/base.rb +5 -0
  79. data/test/factories/servico/betha/base.rb +5 -0
  80. data/test/factories/servico/betha/v1/build_response.rb +6 -0
  81. data/test/factories/servico/betha/v1/cancelamento_nfs.rb +7 -0
  82. data/test/factories/servico/betha/v1/consulta_lote_rps.rb +6 -0
  83. data/test/factories/servico/betha/v1/consulta_nfs_por_rps.rb +6 -0
  84. data/test/factories/servico/betha/v1/consulta_nfse.rb +8 -0
  85. data/test/factories/servico/betha/v1/consulta_situacao_lote_rps.rb +6 -0
  86. data/test/factories/servico/betha/v1/gateway.rb +5 -0
  87. data/test/factories/servico/betha/v1/recepcao_lote_rps.rb +6 -0
  88. data/test/factories/servico/intermediario.rb +7 -0
  89. data/test/factories/servico/response/default.rb +10 -0
  90. data/test/factories/servico/response/nota_fiscal.rb +47 -0
  91. data/test/factories/servico/rps.rb +44 -0
  92. data/test/test_helper.rb +39 -0
  93. metadata +263 -0
@@ -0,0 +1,558 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Servico::Betha::V1::BuildResponse do
4
+ subject { FactoryGirl.build(:betha_v1_build_response) }
5
+
6
+ describe "#messages" do
7
+ it "deve retornar o resultado da key do hash conforme o atributo nfe_method com _resposta no fim" do
8
+ subject.nfe_method = :algo
9
+ subject.hash = {algo_resposta: {valor_a: 1}}
10
+ subject.messages.must_equal({valor_a: 1})
11
+ end
12
+ end
13
+
14
+ describe "#success?" do
15
+ it "deve ser true quanto não tem mensagem de retorno" do
16
+ subject.stubs(:messages).returns({lista_mensagem_retorno: nil})
17
+ subject.success?.must_equal true
18
+ end
19
+
20
+ it "deve ser false quanto tem alguma mensagem de retorno" do
21
+ subject.stubs(:messages).returns({lista_mensagem_retorno: {codigo: 1} })
22
+ subject.success?.must_equal false
23
+ end
24
+ end
25
+
26
+ describe "#error_messages" do
27
+ before do
28
+ subject.nfe_method = :key
29
+ subject.hash = {key_resposta: {
30
+ lista_mensagem_retorno: {mensagem_retorno: {
31
+ codigo: "999",
32
+ mensagem: "A mensagem",
33
+ correcao: "A correcao"
34
+ }}
35
+ }}
36
+ end
37
+ it "se ja tem valor na variavel @error_messages deve retornar o conteudo da variavel" do
38
+ subject.instance_variable_set(:@error_messages, [123])
39
+ subject.error_messages.must_equal([123])
40
+ end
41
+ it "se for success? então deve retornar um valor vazio" do
42
+ subject.stubs(:success?).returns(true)
43
+ subject.error_messages.must_equal([])
44
+ end
45
+
46
+ it "deve retornar um vetor com um hash com as mensagens quando houver apenas 1 mensagem em um hash" do
47
+ subject.error_messages.size.must_equal 1
48
+ subject.error_messages.class.must_equal Array
49
+
50
+ subject.error_messages[0][:codigo].must_equal '999'
51
+ subject.error_messages[0][:mensagem].must_equal 'A mensagem'
52
+ subject.error_messages[0][:correcao].must_equal 'A correcao'
53
+ end
54
+
55
+ it "deve retornar todas as mensagens quando houver mais que uma" do
56
+ subject.hash = {key_resposta: {
57
+ lista_mensagem_retorno: {mensagem_retorno: [
58
+ {codigo: "111", mensagem: "A mensagem 1", correcao: "A correcao 1"},
59
+ {codigo: "222", mensagem: "A mensagem 2", correcao: "A correcao 2"},
60
+ ]}
61
+ }}
62
+
63
+ subject.error_messages[0][:codigo].must_equal '111'
64
+ subject.error_messages[0][:mensagem].must_equal 'A mensagem 1'
65
+ subject.error_messages[0][:correcao].must_equal 'A correcao 1'
66
+
67
+ subject.error_messages[1][:codigo].must_equal '222'
68
+ subject.error_messages[1][:mensagem].must_equal 'A mensagem 2'
69
+ subject.error_messages[1][:correcao].must_equal 'A correcao 2'
70
+ end
71
+ end
72
+
73
+
74
+ describe "#response" do
75
+ context "deve instanciar um objeto Response Default" do
76
+ it "com o hash completo" do
77
+ subject.nfe_method = :key
78
+ subject.hash ={ key_resposta: hash_resposta_completa}
79
+
80
+ response = subject.response
81
+ response.success.must_equal false
82
+ response.error_messages.size.must_equal 2
83
+ response.error_messages[0][:codigo].must_equal '111'
84
+ response.error_messages[0][:mensagem].must_equal 'Msg 1'
85
+ response.error_messages[0][:correcao].must_equal 'corr 1'
86
+ response.error_messages[1][:codigo].must_equal '222'
87
+ response.error_messages[1][:mensagem].must_equal 'Msg 2'
88
+ response.error_messages[1][:correcao].must_equal 'corr 2'
89
+
90
+ response.numero_lote.must_equal "333332"
91
+ response.protocolo.must_equal "5566633548"
92
+ response.data_recebimento.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300")
93
+
94
+ response.notas_fiscais.size.must_equal 1
95
+ nota_fiscal = response.notas_fiscais.first
96
+
97
+ nota_fiscal.numero_nf.must_equal "1111"
98
+ nota_fiscal.codigo_verificacao.must_equal "ASDAD"
99
+ nota_fiscal.data_emissao.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300")
100
+ nota_fiscal.rps_numero.must_equal "11111"
101
+ nota_fiscal.rps_serie.must_equal "SN"
102
+ nota_fiscal.rps_tipo.must_equal "1"
103
+ nota_fiscal.rps_situacao.must_be_nil
104
+ nota_fiscal.data_emissao_rps.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300")
105
+ nota_fiscal.competencia.must_equal DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300")
106
+ nota_fiscal.outras_informacoes.must_equal "http://e-gov.betha.com.br/e-nota"
107
+ nota_fiscal.item_lista_servico.must_equal "111"
108
+ nota_fiscal.codigo_cnae.must_equal "6202300"
109
+ nota_fiscal.discriminacao.must_equal "discriminacao"
110
+ nota_fiscal.codigo_municipio.must_equal "4204202"
111
+ nota_fiscal.valor_servicos.must_equal "111"
112
+ nota_fiscal.valor_deducoes.must_equal "0"
113
+ nota_fiscal.valor_pis.must_equal "0.00"
114
+ nota_fiscal.valor_cofins.must_equal "0.00"
115
+ nota_fiscal.valor_inss.must_equal "0.00"
116
+ nota_fiscal.valor_ir.must_equal "0.00"
117
+ nota_fiscal.valor_csll.must_equal "0.00"
118
+ nota_fiscal.iss_retido.must_equal "2"
119
+ nota_fiscal.valor_iss.must_equal "0"
120
+ nota_fiscal.base_calculo.must_equal "111"
121
+ nota_fiscal.aliquota.must_equal "1.0000"
122
+ nota_fiscal.desconto_condicionado.must_equal "desconto_condicionado"
123
+ nota_fiscal.desconto_incondicionado.must_equal "desconto_incondicionado"
124
+ nota_fiscal.orgao_gerador_municipio.must_equal "0"
125
+ nota_fiscal.orgao_gerador_uf.must_equal "SC"
126
+ nota_fiscal.cancelamento_codigo.must_equal "123"
127
+ nota_fiscal.cancelamento_numero_nf.must_equal "123"
128
+ nota_fiscal.cancelamento_cnpj.must_equal "12345678901234"
129
+ nota_fiscal.cancelamento_inscricao_municipal.must_equal "INSCRICAO CANCELAMENTO"
130
+ nota_fiscal.cancelamento_municipio.must_equal "99999999"
131
+ nota_fiscal.cancelamento_sucesso.must_equal true
132
+ nota_fiscal.cancelamento_data_hora.must_equal DateTime.parse("Fri, 05 Sep 2015 09:56:17 -0300")
133
+ nota_fiscal.nfe_substituidora.must_equal "663322"
134
+ nota_fiscal.codigo_obra.must_equal "3333"
135
+ nota_fiscal.codigo_art.must_equal "4444"
136
+
137
+ #Intermediario
138
+ nota_fiscal.intermediario.razao_social.must_equal "RAZAO_SOCIAL INTERMEDIARIO"
139
+ nota_fiscal.intermediario.cpf_cnpj.must_equal "cpf intermediario"
140
+ nota_fiscal.intermediario.inscricao_municipal.must_equal "inscricao_municipal intermediario"
141
+
142
+ # Emitente / prestador
143
+ nota_fiscal.emitente.cnpj.must_equal "18113831000135"
144
+ nota_fiscal.emitente.inscricao_municipal.must_equal "inscricao_municipal prestador"
145
+ nota_fiscal.emitente.razao_social.must_equal "EMPRESA NACIONAL LTDA - ME"
146
+ nota_fiscal.emitente.nome_fantasia.must_equal "EMPRESA NACIONAL"
147
+ nota_fiscal.emitente.telefone.must_equal "123456"
148
+ nota_fiscal.emitente.email.must_equal "email@prestador"
149
+ nota_fiscal.emitente.regime_especial_tributacao.must_be_nil
150
+ nota_fiscal.emitente.optante_simples_nacional.must_equal "emitente optante_simples_nacional"
151
+ nota_fiscal.emitente.incentivo_fiscal.must_be_nil
152
+ nota_fiscal.emitente.natureza_operacao.must_equal "1"
153
+
154
+ # Destinatario / Tomador
155
+ nota_fiscal.destinatario.cpf_cnpj.must_equal "12345678901"
156
+ nota_fiscal.destinatario.inscricao_estadual.must_equal "tomador inscricao_estadual"
157
+ nota_fiscal.destinatario.inscricao_municipal.must_equal "tomador inscricao_municipal"
158
+ nota_fiscal.destinatario.razao_social.must_equal "TOMADOR SERVICO"
159
+ nota_fiscal.destinatario.telefone.must_equal "336644557"
160
+ nota_fiscal.destinatario.email.must_equal "mail@prestador.com"
161
+ end
162
+
163
+ it "com o hash parcial e mais de uma nota" do
164
+ subject.nfe_method = :key
165
+ subject.hash ={ key_resposta: hash_resposta_parcial}
166
+
167
+ response = subject.response
168
+ response.success.must_equal true
169
+ response.error_messages.size.must_equal 0
170
+
171
+ response.numero_lote.must_be_nil
172
+ response.protocolo.must_be_nil
173
+ response.data_recebimento.must_be_nil
174
+
175
+ response.notas_fiscais.size.must_equal 2
176
+ nota_fiscal_1 = response.notas_fiscais.first
177
+ nota_fiscal_2 = response.notas_fiscais.last
178
+
179
+ nota_fiscal_1.numero_nf.must_equal "1111"
180
+ nota_fiscal_1.codigo_verificacao.must_equal "ASDAD"
181
+ nota_fiscal_1.data_emissao.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300")
182
+ nota_fiscal_1.rps_numero.must_equal "11111"
183
+ nota_fiscal_1.rps_serie.must_equal "SN"
184
+ nota_fiscal_1.rps_tipo.must_equal "1"
185
+ nota_fiscal_1.rps_situacao.must_be_nil
186
+ nota_fiscal_1.data_emissao_rps.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300")
187
+ nota_fiscal_1.competencia.must_equal DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300")
188
+ nota_fiscal_1.outras_informacoes.must_equal "http://e-gov.betha.com.br/e-nota"
189
+ nota_fiscal_1.item_lista_servico.must_equal "111"
190
+ nota_fiscal_1.codigo_cnae.must_equal "6202300"
191
+ nota_fiscal_1.discriminacao.must_equal "discriminacao"
192
+ nota_fiscal_1.codigo_municipio.must_equal "4204202"
193
+ nota_fiscal_1.valor_servicos.must_equal "111"
194
+ nota_fiscal_1.valor_deducoes.must_equal "0"
195
+ nota_fiscal_1.valor_pis.must_equal "0.00"
196
+ nota_fiscal_1.valor_cofins.must_equal "0.00"
197
+ nota_fiscal_1.valor_inss.must_equal "0.00"
198
+ nota_fiscal_1.valor_ir.must_equal "0.00"
199
+ nota_fiscal_1.valor_csll.must_equal "0.00"
200
+ nota_fiscal_1.iss_retido.must_equal "2"
201
+ nota_fiscal_1.valor_iss.must_equal "0"
202
+ nota_fiscal_1.base_calculo.must_equal "111"
203
+ nota_fiscal_1.aliquota.must_equal "1.0000"
204
+ nota_fiscal_1.desconto_condicionado.must_equal "desconto_condicionado"
205
+ nota_fiscal_1.desconto_incondicionado.must_equal "desconto_incondicionado"
206
+ nota_fiscal_1.orgao_gerador_municipio.must_equal "0"
207
+ nota_fiscal_1.orgao_gerador_uf.must_equal "SC"
208
+ nota_fiscal_1.cancelamento_codigo.must_equal "123"
209
+ nota_fiscal_1.cancelamento_numero_nf.must_equal "123"
210
+ nota_fiscal_1.cancelamento_cnpj.must_equal "12345678901234"
211
+ nota_fiscal_1.cancelamento_inscricao_municipal.must_equal "INSCRICAO CANCELAMENTO"
212
+ nota_fiscal_1.cancelamento_municipio.must_equal "99999999"
213
+ nota_fiscal_1.cancelamento_sucesso.must_equal true
214
+ nota_fiscal_1.cancelamento_data_hora.must_equal DateTime.parse("Fri, 05 Sep 2015 09:56:17 -0300")
215
+ nota_fiscal_1.nfe_substituidora.must_equal "663322"
216
+ nota_fiscal_1.codigo_obra.must_equal "3333"
217
+ nota_fiscal_1.codigo_art.must_equal "4444"
218
+
219
+ nota_fiscal_2.numero_nf.must_equal "NOTA2 numero_nf"
220
+ nota_fiscal_2.codigo_verificacao.must_equal "NOTA2 codigo_verificacao"
221
+ nota_fiscal_2.data_emissao.must_equal "NOTA2 data_emissao"
222
+ nota_fiscal_2.rps_numero.must_equal "NOTA2 rps_numero"
223
+ nota_fiscal_2.rps_serie.must_equal "NOTA2 rps_serie"
224
+ nota_fiscal_2.rps_tipo.must_equal "NOTA2 rps_tipo"
225
+ nota_fiscal_2.data_emissao_rps.must_equal "NOTA2 data_emissao_rps"
226
+ nota_fiscal_2.competencia.must_equal "NOTA2 competencia"
227
+ nota_fiscal_2.outras_informacoes.must_equal "NOTA2 outras_informacoes"
228
+ nota_fiscal_2.item_lista_servico.must_equal "NOTA2 item_lista_servico"
229
+ nota_fiscal_2.discriminacao.must_equal "NOTA2 discriminacao"
230
+ nota_fiscal_2.codigo_municipio.must_equal "NOTA2 codigo_municipio"
231
+ nota_fiscal_2.valor_servicos.must_equal "NOTA2 valor_servicos"
232
+ nota_fiscal_2.base_calculo.must_equal "NOTA2 base_calculo"
233
+ nota_fiscal_2.aliquota.must_equal "NOTA2 aliquota"
234
+ nota_fiscal_2.codigo_cnae.must_be_nil
235
+ nota_fiscal_2.valor_deducoes.must_be_nil
236
+ nota_fiscal_2.valor_pis.must_be_nil
237
+ nota_fiscal_2.valor_cofins.must_be_nil
238
+ nota_fiscal_2.valor_inss.must_be_nil
239
+ nota_fiscal_2.valor_ir.must_be_nil
240
+ nota_fiscal_2.valor_csll.must_be_nil
241
+ nota_fiscal_2.iss_retido.must_be_nil
242
+ nota_fiscal_2.valor_iss.must_be_nil
243
+ nota_fiscal_2.desconto_condicionado.must_be_nil
244
+ nota_fiscal_2.desconto_incondicionado.must_be_nil
245
+ nota_fiscal_2.orgao_gerador_municipio.must_be_nil
246
+ nota_fiscal_2.orgao_gerador_uf.must_be_nil
247
+ nota_fiscal_2.cancelamento_codigo.must_be_nil
248
+ nota_fiscal_2.cancelamento_numero_nf.must_be_nil
249
+ nota_fiscal_2.cancelamento_cnpj.must_be_nil
250
+ nota_fiscal_2.cancelamento_inscricao_municipal.must_be_nil
251
+ nota_fiscal_2.cancelamento_municipio.must_be_nil
252
+ nota_fiscal_2.cancelamento_sucesso.must_be_nil
253
+ nota_fiscal_2.cancelamento_data_hora.must_be_nil
254
+ nota_fiscal_2.nfe_substituidora.must_be_nil
255
+ nota_fiscal_2.codigo_obra.must_be_nil
256
+ nota_fiscal_2.codigo_art.must_be_nil
257
+ end
258
+
259
+ end
260
+ end
261
+
262
+
263
+ def hash_resposta_completa
264
+ {
265
+ protocolo: "5566633548",
266
+ data_recebimento: DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300"),
267
+ numero_lote: '333332',
268
+ lista_nfse: {
269
+ compl_nfse: {
270
+ nfse: {
271
+ inf_nfse: {
272
+ numero: "1111",
273
+ codigo_verificacao: "ASDAD",
274
+ data_emissao: DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300"),
275
+ identificacao_rps: {
276
+ numero: "11111",
277
+ serie: "SN",
278
+ tipo: "1"
279
+ },
280
+ data_emissao_rps: DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300"),
281
+ natureza_operacao: "1",
282
+ optante_simples_nacional: "emitente optante_simples_nacional",
283
+ competencia: DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300"),
284
+ outras_informacoes: "http://e-gov.betha.com.br/e-nota",
285
+ servico: {
286
+ valores: {
287
+ valor_servicos: "111",
288
+ valor_deducoes: "0",
289
+ valor_pis: "0.00",
290
+ valor_cofins: "0.00",
291
+ valor_inss: "0.00",
292
+ valor_ir: "0.00",
293
+ valor_csll: "0.00",
294
+ iss_retido: "2",
295
+ valor_iss: "0",
296
+ base_calculo: "111",
297
+ aliquota: "1.0000",
298
+ desconto_condicionado: "desconto_condicionado",
299
+ desconto_incondicionado: "desconto_incondicionado"
300
+ },
301
+ item_lista_servico: "111",
302
+ codigo_cnae: "6202300",
303
+ discriminacao: "discriminacao",
304
+ codigo_municipio: "4204202"
305
+ },
306
+ intermediario_servico: {
307
+ razao_social: "razao_social intermediario",
308
+ cpf_cnpj: {cpf: 'cpf intermediario'},
309
+ inscricao_municipal: "inscricao_municipal intermediario"
310
+
311
+ },
312
+ prestador_servico: {
313
+ identificacao_prestador: {
314
+ cnpj: "18113831000135",
315
+ inscricao_municipal: "inscricao_municipal prestador",
316
+ },
317
+ razao_social: "EMPRESA NACIONAL LTDA - ME",
318
+ nome_fantasia: "EMPRESA NACIONAL",
319
+ endereco: {
320
+ endereco: "RUA PRESTADOR",
321
+ numero: "111",
322
+ complemento: "COMPLEMENTO PRESTADOR",
323
+ bairro: "BAIRRO PRESTADOR",
324
+ codigo_municipio: "4204202",
325
+ uf: "SC",
326
+ cep: "89805675"
327
+ },
328
+ contato: {
329
+ telefone: "123456",
330
+ email: "email@prestador",
331
+ }
332
+ },
333
+ tomador_servico: {
334
+ identificacao_tomador: {
335
+ cpf_cnpj: {
336
+ cpf: "12345678901",
337
+ },
338
+ inscricao_estadual: "tomador inscricao_estadual",
339
+ inscricao_municipal: "tomador inscricao_municipal"
340
+ },
341
+ razao_social: "TOMADOR SERVIcO",
342
+ endereco: {
343
+ endereco: "RUA TOMADOR",
344
+ numero: "99999",
345
+ complemento: "COMPLEMENTO TOMADOR",
346
+ bairro: "BAIRRO TOMADOR",
347
+ codigo_municipio: "4204202",
348
+ uf: "SC",
349
+ cep: "89805675"
350
+ },
351
+ contato: {
352
+ telefone: "336644557",
353
+ email: "mail@prestador.com"
354
+ }
355
+ },
356
+ orgao_gerador: {
357
+ codigo_municipio: "0",
358
+ uf: "SC"
359
+ },
360
+ construcao_civil: {
361
+ codigo_obra: '3333',
362
+ art: '4444'
363
+ }
364
+ }
365
+ },
366
+ nfse_cancelamento: {
367
+ confirmacao: {
368
+ pedido: {
369
+ inf_pedido_cancelamento: {
370
+ codigo_cancelamento: '123',
371
+ identificacao_nfse: {
372
+ numero: '123',
373
+ cnpj: '12345678901234',
374
+ inscricao_municipal: 'INSCRICAO CANCELAMENTO',
375
+ codigo_municipio: '99999999'
376
+ }
377
+ },
378
+ signature: nil
379
+ },
380
+ inf_confirmacao_cancelamento: {
381
+ sucesso: true,
382
+ data_hora: DateTime.parse("Fri, 05 Sep 2015 09:56:17 -0300")
383
+ }
384
+ }
385
+ },
386
+ nfse_substituicao: {
387
+ substituicao_nfse: {
388
+ nfse_substituidora: '663322'
389
+ }
390
+ }
391
+ }
392
+ },
393
+ lista_mensagem_retorno: {
394
+ mensagem_retorno: [
395
+ {codigo: '111', mensagem: 'Msg 1', correcao: 'corr 1'},
396
+ {codigo: '222', mensagem: 'Msg 2', correcao: 'corr 2'}
397
+ ]
398
+ }
399
+ }
400
+ end
401
+
402
+ def hash_resposta_parcial
403
+ {
404
+ lista_nfse: {
405
+ compl_nfse: [
406
+ {
407
+ nfse: {
408
+ inf_nfse: {
409
+ numero: "1111",
410
+ codigo_verificacao: "ASDAD",
411
+ data_emissao: DateTime.parse("Fri, 04 Sep 2015 09:56:22 -0300"),
412
+ identificacao_rps: {
413
+ numero: "11111",
414
+ serie: "SN",
415
+ tipo: "1"
416
+ },
417
+ data_emissao_rps: DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300"),
418
+ natureza_operacao: "1",
419
+ optante_simples_nacional: "1",
420
+ competencia: DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300"),
421
+ outras_informacoes: "http://e-gov.betha.com.br/e-nota",
422
+ servico: {
423
+ valores: {
424
+ valor_servicos: "111",
425
+ valor_deducoes: "0",
426
+ valor_pis: "0.00",
427
+ valor_cofins: "0.00",
428
+ valor_inss: "0.00",
429
+ valor_ir: "0.00",
430
+ valor_csll: "0.00",
431
+ iss_retido: "2",
432
+ valor_iss: "0",
433
+ base_calculo: "111",
434
+ aliquota: "1.0000",
435
+ desconto_condicionado: "desconto_condicionado",
436
+ desconto_incondicionado: "desconto_incondicionado"
437
+ },
438
+ item_lista_servico: "111",
439
+ codigo_cnae: "6202300",
440
+ discriminacao: "discriminacao",
441
+ codigo_municipio: "4204202"
442
+ },
443
+ prestador_servico: {
444
+ identificacao_prestador: {
445
+ cnpj: "18113831000135"
446
+ },
447
+ razao_social: "EMPRESA NACIONAL LTDA - ME",
448
+ nome_fantasia: "EMPRESA NACIONAL",
449
+ endereco: {
450
+ endereco: "RUA PRESTADOR",
451
+ numero: "111",
452
+ complemento: "COMPLEMENTO PRESTADOR",
453
+ bairro: "BAIRRO PRESTADOR",
454
+ codigo_municipio: "4204202",
455
+ uf: "SC",
456
+ cep: "89805675"
457
+ },
458
+ contato: {
459
+ email: "email@prestador",
460
+ telefone: "123456"
461
+ }
462
+ },
463
+ tomador_servico: {
464
+ identificacao_tomador: {
465
+ cpf_cnpj: {
466
+ cnpj: "12345678901234"
467
+ }
468
+ },
469
+ razao_social: "TOMADOR SERVIÇO",
470
+ endereco: {
471
+ endereco: "RUA TOMADOR",
472
+ numero: "99999",
473
+ complemento: "COMPLEMENTO TOMADOR",
474
+ bairro: "BAIRRO TOMADOR",
475
+ codigo_municipio: "4204202",
476
+ uf: "SC",
477
+ cep: "89805675"
478
+ },
479
+ contato: {
480
+ telefone: "336644557",
481
+ email: "mail@prestador.com"
482
+ }
483
+ },
484
+ orgao_gerador: {
485
+ codigo_municipio: "0",
486
+ uf: "SC"
487
+ },
488
+ construcao_civil: {
489
+ codigo_obra: '3333',
490
+ art: '4444'
491
+ }
492
+ }
493
+ },
494
+ nfse_cancelamento: {
495
+ confirmacao: {
496
+ pedido: {
497
+ inf_pedido_cancelamento: {
498
+ codigo_cancelamento: '123',
499
+ identificacao_nfse: {
500
+ numero: '123',
501
+ cnpj: '12345678901234',
502
+ inscricao_municipal: 'INSCRICAO CANCELAMENTO',
503
+ codigo_municipio: '99999999'
504
+ }
505
+ },
506
+ signature: nil
507
+ },
508
+ inf_confirmacao_cancelamento: {
509
+ sucesso: true,
510
+ data_hora: DateTime.parse("Fri, 05 Sep 2015 09:56:17 -0300")
511
+ }
512
+ }
513
+ },
514
+ nfse_substituicao: {
515
+ substituicao_nfse: {
516
+ nfse_substituidora: '663322'
517
+ }
518
+ }
519
+ },
520
+ {
521
+ nfse: {
522
+ inf_nfse: {
523
+ numero: "NOTA2 numero_nf",
524
+ codigo_verificacao: "NOTA2 codigo_verificacao",
525
+ data_emissao: "NOTA2 data_emissao",
526
+ identificacao_rps: {
527
+ numero: "NOTA2 rps_numero",
528
+ serie: "NOTA2 rps_serie",
529
+ tipo: "NOTA2 rps_tipo"
530
+ },
531
+ data_emissao_rps: "NOTA2 data_emissao_rps",
532
+ natureza_operacao: "NOTA2 natureza_operacao",
533
+ optante_simples_nacional: "NOTA2 optante_simples_nacional",
534
+ competencia: "NOTA2 competencia",
535
+ outras_informacoes: "NOTA2 outras_informacoes",
536
+ servico: {
537
+ valores: {
538
+ valor_servicos: "NOTA2 valor_servicos",
539
+ base_calculo: "NOTA2 base_calculo",
540
+ aliquota: "NOTA2 aliquota"
541
+ },
542
+ item_lista_servico: "NOTA2 item_lista_servico",
543
+ discriminacao: "NOTA2 discriminacao",
544
+ codigo_municipio: "NOTA2 codigo_municipio"
545
+ },
546
+ }
547
+ },
548
+ nfse_cancelamento: {
549
+ confirmacao: nil
550
+ },
551
+ nfse_substituicao: nil
552
+ }
553
+ ]
554
+ },
555
+ lista_mensagem_retorno: nil
556
+ }
557
+ end
558
+ end
@@ -0,0 +1,62 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Servico::Betha::V1::CancelamentoNfs do
4
+ subject { FactoryGirl.build(:servico_betha_cancelamento_nfs, emitente: emitente) }
5
+ let(:emitente) { FactoryGirl.build(:emitente) }
6
+
7
+ describe "superclass" do
8
+ it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
9
+ end
10
+
11
+ describe "#wsdl" do
12
+ context "for env production" do
13
+ it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/cancelarNfseV02?wsdl' }
14
+ end
15
+ context "for env test" do
16
+ before do
17
+ subject.env = :test
18
+ end
19
+ it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-test-ws/cancelarNfseV02?wsdl' }
20
+ end
21
+ end
22
+
23
+ describe "#method_wsdl" do
24
+ it { subject.method_wsdl.must_equal :cancelar_nfse }
25
+ end
26
+
27
+
28
+ describe "#xml_inf_pedido_cancelamento" do
29
+ it "estrutura" do
30
+ xml = subject.send(:xml_inf_pedido_cancelamento).doc
31
+
32
+ xml.xpath('InfPedidoCancelamento/CodigoCancelamento').first.text.must_equal subject.codigo_cancelamento
33
+
34
+ xml.xpath('InfPedidoCancelamento/IdentificacaoNfse/Numero').first.text.must_equal subject.numero_nfse
35
+
36
+ xml.xpath('InfPedidoCancelamento/IdentificacaoNfse/Cnpj').first.text.must_equal emitente.cnpj
37
+ xml.xpath('InfPedidoCancelamento/IdentificacaoNfse/InscricaoMunicipal').first.text.must_equal emitente.inscricao_municipal
38
+ xml.xpath('InfPedidoCancelamento/IdentificacaoNfse/CodigoMunicipio').first.text.must_equal emitente.endereco.codigo_municipio
39
+ end
40
+ end
41
+
42
+
43
+ describe "#xml_builder" do
44
+ let(:info_pedido) do
45
+ Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
46
+ xml.InfPedidoCancelamento 'Valor'
47
+ end
48
+ end
49
+
50
+ it "deve adicionar o valor do xml_inf_pedido_cancelamento e assinar o xml" do
51
+ subject.stubs(:xml_inf_pedido_cancelamento).returns(info_pedido)
52
+ subject.expects(:assinatura_xml).with(info_pedido.doc.root.to_s).returns("<Signature>Val</Signature>")
53
+ xml = subject.xml_builder
54
+ xml = Nokogiri::XML xml
55
+
56
+ xml.xpath('Pedido/InfPedidoCancelamento').first.text.must_equal 'Valor'
57
+ xml.xpath('Pedido/Signature').first.text.must_equal 'Val'
58
+
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Servico::Betha::V1::ConsultaLoteRps do
4
+ subject { FactoryGirl.build(:servico_betha_consulta_lote_rps, emitente: emitente) }
5
+ let(:emitente) { FactoryGirl.build(:emitente) }
6
+
7
+ describe "superclass" do
8
+ it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
9
+ end
10
+
11
+ describe "#wsdl" do
12
+ context "for env production" do
13
+ it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/consultarLoteRps?wsdl' }
14
+ end
15
+ context "for env test" do
16
+ before do
17
+ subject.env = :test
18
+ end
19
+ it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-test-ws/consultarLoteRps?wsdl' }
20
+ end
21
+ end
22
+
23
+ describe "#method_wsdl" do
24
+ it { subject.method_wsdl.must_equal :consultar_lote_rps }
25
+ end
26
+
27
+
28
+ describe "#xml_builder" do
29
+ it "deve adicionar o valor do xml_inf_pedido_cancelamento e assinar o xml" do
30
+ subject.protocolo = '6654898765131'
31
+
32
+ xml = subject.xml_builder.to_s
33
+ xml = Nokogiri::XML xml
34
+
35
+ xml.xpath('Temp/Prestador/Cnpj').first.text.must_equal emitente.cnpj
36
+ xml.xpath('Temp/Prestador/InscricaoMunicipal').first.text.must_equal emitente.inscricao_municipal
37
+ xml.xpath('Temp/Protocolo').first.text.must_equal '6654898765131'
38
+
39
+ end
40
+ end
41
+
42
+ end