br_nfe 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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