br_nfe 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +16 -0
  5. data/Gemfile.lock +27 -3
  6. data/LICENSE +1 -1
  7. data/README.markdown +10 -12
  8. data/Rakefile +13 -0
  9. data/br_nfe.gemspec +18 -21
  10. data/lib/br_nfe/active_model_base.rb +7 -1
  11. data/lib/br_nfe/base.rb +175 -37
  12. data/lib/br_nfe/endereco.rb +7 -1
  13. data/lib/br_nfe/helper/have_rps.rb +1 -1
  14. data/lib/br_nfe/helper/values_ts/service_v1.rb +313 -0
  15. data/lib/br_nfe/response/service/build_response.rb +286 -0
  16. data/lib/br_nfe/response/service/default.rb +185 -0
  17. data/lib/br_nfe/{servico/response → response/service}/nota_fiscal.rb +11 -10
  18. data/lib/br_nfe/response/service/paths/base.rb +93 -0
  19. data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +22 -0
  20. data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +25 -0
  21. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +25 -0
  22. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +25 -0
  23. data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +31 -0
  24. data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +36 -0
  25. data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +127 -0
  26. data/lib/br_nfe/service/base.rb +59 -0
  27. data/lib/br_nfe/service/betha/base.rb +8 -0
  28. data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +39 -0
  29. data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +34 -0
  30. data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +32 -0
  31. data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +32 -0
  32. data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +30 -0
  33. data/lib/br_nfe/service/betha/v1/gateway.rb +21 -0
  34. data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +37 -0
  35. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +19 -0
  36. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +17 -0
  37. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +17 -0
  38. data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +20 -0
  39. data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +18 -0
  40. data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +29 -0
  41. data/lib/br_nfe/service/concerns/rules/recepcao_lote_rps.rb +50 -0
  42. data/lib/br_nfe/{servico → service}/intermediario.rb +1 -1
  43. data/lib/br_nfe/service/item.rb +70 -0
  44. data/lib/br_nfe/service/rps.rb +231 -0
  45. data/lib/br_nfe/service/sc/florianopolis/base.rb +25 -0
  46. data/lib/br_nfe/service/sc/florianopolis/cancellation.rb +30 -0
  47. data/lib/br_nfe/service/sc/florianopolis/emission_rps.rb +19 -0
  48. data/lib/br_nfe/service/sc/florianopolis/xml/_address.xml.slim +21 -0
  49. data/lib/br_nfe/service/sc/florianopolis/xml/_contact.xml.slim +3 -0
  50. data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +9 -0
  51. data/lib/br_nfe/service/sc/florianopolis/xml/cancellation.xml.slim +6 -0
  52. data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +55 -0
  53. data/lib/br_nfe/service/sc/gaspar/cancela_nfse.rb +13 -0
  54. data/lib/br_nfe/service/sc/gaspar/consulta_lote_rps.rb +13 -0
  55. data/lib/br_nfe/service/sc/gaspar/consulta_nfs_por_rps.rb +13 -0
  56. data/lib/br_nfe/service/sc/gaspar/consulta_nfse.rb +17 -0
  57. data/lib/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps.rb +13 -0
  58. data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps.rb +13 -0
  59. data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado.rb +13 -0
  60. data/lib/br_nfe/service/thema/v1/base.rb +55 -0
  61. data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +48 -0
  62. data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +49 -0
  63. data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +48 -0
  64. data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +47 -0
  65. data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +46 -0
  66. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +51 -0
  67. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +30 -0
  68. data/lib/br_nfe/service/xml/v1/_tc_contato.xml.slim +7 -0
  69. data/lib/br_nfe/service/xml/v1/_tc_cpf_cnpj.xml.slim +5 -0
  70. data/lib/br_nfe/service/xml/v1/_tc_dados_construcao_civil.xml.slim +2 -0
  71. data/lib/br_nfe/service/xml/v1/_tc_dados_prestador.xml.slim +15 -0
  72. data/lib/br_nfe/service/xml/v1/_tc_dados_servico.xml.slim +14 -0
  73. data/lib/br_nfe/service/xml/v1/_tc_dados_tomador.xml.slim +15 -0
  74. data/lib/br_nfe/service/xml/v1/_tc_endereco.xml.slim +13 -0
  75. data/lib/br_nfe/service/xml/v1/_tc_identificacao_intermediario_servico.xml.slim +7 -0
  76. data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +7 -0
  77. data/lib/br_nfe/service/xml/v1/_tc_identificacao_orgao_gerador.xml.slim +8 -0
  78. data/lib/br_nfe/service/xml/v1/_tc_identificacao_prestador.xml.slim +3 -0
  79. data/lib/br_nfe/service/xml/v1/_tc_identificacao_rps.xml.slim +16 -0
  80. data/lib/br_nfe/service/xml/v1/_tc_identificacao_tomador.xml.slim +4 -0
  81. data/lib/br_nfe/service/xml/v1/_tc_inf_pedido_cancelamento.xml.slim +4 -0
  82. data/lib/br_nfe/service/xml/v1/_tc_inf_rps.xml.slim +47 -0
  83. data/lib/br_nfe/service/xml/v1/_tc_lote_rps.xml.slim +9 -0
  84. data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +4 -0
  85. data/lib/br_nfe/service/xml/v1/_tc_rps.xml.slim +8 -0
  86. data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +48 -0
  87. data/lib/br_nfe/service/xml/v1/servico_cancelar_nfse_envio.xml.slim +9 -0
  88. data/lib/br_nfe/service/xml/v1/servico_consultar_lote_rps_envio.xml.slim +4 -0
  89. data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_envio.xml.slim +19 -0
  90. data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_rps_envio.xml.slim +5 -0
  91. data/lib/br_nfe/service/xml/v1/servico_consultar_situacao_lote_rps_envio.xml.slim +4 -0
  92. data/lib/br_nfe/service/xml/v1/servico_enviar_lote_rps_envio.xml.slim +9 -0
  93. data/lib/br_nfe/version.rb +2 -2
  94. data/lib/br_nfe/xml/_signed_info_sh1.xml.slim +9 -0
  95. data/lib/br_nfe/xml/signature_sh1.xml.slim +12 -0
  96. data/lib/br_nfe/xml/soap_env.xml.slim +3 -0
  97. data/lib/br_nfe.rb +72 -20
  98. data/test/br_nfe/base_test.rb +257 -108
  99. data/test/br_nfe/helper/have_intermediario_test.rb +2 -2
  100. data/test/br_nfe/helper/have_rps_test.rb +4 -4
  101. data/test/br_nfe/response/service/build_response_test.rb +377 -0
  102. data/test/br_nfe/response/service/default_test.rb +218 -0
  103. data/test/br_nfe/{servico/response → response/service}/nota_fiscal_test.rb +2 -2
  104. data/test/br_nfe/response/service/paths/base_test.rb +199 -0
  105. data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +25 -0
  106. data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +30 -0
  107. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +30 -0
  108. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +30 -0
  109. data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +30 -0
  110. data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +34 -0
  111. data/test/br_nfe/response/service/paths/v1/tc_nfse_test.rb +122 -0
  112. data/test/br_nfe/service/base_test.rb +138 -0
  113. data/test/br_nfe/service/betha/base_test.rb +9 -0
  114. data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +60 -0
  115. data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +55 -0
  116. data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +55 -0
  117. data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +53 -0
  118. data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +49 -0
  119. data/test/br_nfe/service/betha/v1/gateway_test.rb +35 -0
  120. data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +84 -0
  121. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +16 -0
  122. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +16 -0
  123. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +16 -0
  124. data/test/br_nfe/service/betha/v1/xsd/TiposNFe_v01.xsd +583 -0
  125. data/test/br_nfe/service/betha/v1/xsd/nfse_v01.xsd +652 -0
  126. data/test/br_nfe/service/betha/v1/xsd/servico_cancelar_nfse_envio_v01.xsd +17 -0
  127. data/test/br_nfe/service/betha/v1/xsd/servico_consultar_lote_rps_envio_v01.xsd +16 -0
  128. data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_envio_v01.xsd +28 -0
  129. data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_rps_envio_v01.xsd +16 -0
  130. data/test/br_nfe/service/betha/v1/xsd/servico_consultar_situacao_lote_rps_envio_v01.xsd +16 -0
  131. data/test/br_nfe/service/betha/v1/xsd/servico_enviar_lote_rps_envio_v01.xsd +17 -0
  132. data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema.xsd +308 -0
  133. data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema_v01.xsd +95 -0
  134. data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +15 -0
  135. data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +36 -0
  136. data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +42 -0
  137. data/test/br_nfe/{servico/base_test.rb → service/concerns/rules/recepcao_lote_rps_test.rb} +12 -4
  138. data/test/br_nfe/{servico → service}/intermediario_test.rb +1 -1
  139. data/test/br_nfe/service/item_test.rb +34 -0
  140. data/test/br_nfe/{servico → service}/rps_test.rb +191 -43
  141. data/test/br_nfe/service/sc/florianopolis/XSD/TiposNFSe_v2.0.xsd +863 -0
  142. data/test/br_nfe/service/sc/florianopolis/XSD/xmldsig-core-schema.xsd +309 -0
  143. data/test/br_nfe/service/sc/florianopolis/base_test.rb +20 -0
  144. data/test/br_nfe/service/sc/florianopolis/cancellation_test.rb +36 -0
  145. data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +145 -0
  146. data/test/br_nfe/service/sc/gaspar/cancela_nfse_test.rb +21 -0
  147. data/test/br_nfe/service/sc/gaspar/consulta_nfs_por_rps_test.rb +21 -0
  148. data/test/br_nfe/service/sc/gaspar/consulta_nfse_test.rb +21 -0
  149. data/test/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps_test.rb +21 -0
  150. data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado_test.rb +22 -0
  151. data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_test.rb +22 -0
  152. data/test/br_nfe/service/thema/v1/base_test.rb +65 -0
  153. data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +56 -0
  154. data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +47 -0
  155. data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +50 -0
  156. data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +50 -0
  157. data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +47 -0
  158. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +62 -0
  159. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test_limitado.rb +50 -0
  160. data/test/br_nfe/service/thema/v1/xsd/nfse.xsd +656 -0
  161. data/test/br_nfe/service/thema/v1/xsd/xmldsig-core-schema20020212.xsd +318 -0
  162. data/test/br_nfe/service/xsd/v1/nfse.xsd +779 -0
  163. data/test/br_nfe/service/xsd/v1/xmldsig-core-schema20020212.xsd +316 -0
  164. data/test/cert.pfx +0 -0
  165. data/test/factories/base.rb +2 -0
  166. data/test/factories/destinatario.rb +3 -3
  167. data/test/factories/response/service/build_response.rb +5 -0
  168. data/test/factories/response/service/default.rb +10 -0
  169. data/test/factories/{servico/response → response/service}/nota_fiscal.rb +9 -9
  170. data/test/factories/service/base.rb +6 -0
  171. data/test/factories/service/betha/base.rb +4 -0
  172. data/test/factories/service/betha/v1/cancelamento_nfs.rb +9 -0
  173. data/test/factories/{servico → service}/betha/v1/consulta_lote_rps.rb +2 -2
  174. data/test/factories/{servico → service}/betha/v1/consulta_nfs_por_rps.rb +1 -1
  175. data/test/factories/service/betha/v1/consulta_nfse.rb +8 -0
  176. data/test/factories/{servico → service}/betha/v1/consulta_situacao_lote_rps.rb +2 -2
  177. data/test/factories/{servico → service}/betha/v1/gateway.rb +1 -1
  178. data/test/factories/service/betha/v1/recepcao_lote_rps.rb +8 -0
  179. data/test/factories/{servico → service}/intermediario.rb +2 -2
  180. data/test/factories/service/item.rb +12 -0
  181. data/test/factories/service/rps.rb +50 -0
  182. data/test/factories/service/sc/florianopolis/base.rb +5 -0
  183. data/test/factories/service/sc/florianopolis/cancellation.rb +7 -0
  184. data/test/factories/service/sc/florianopolis/emission_rps.rb +7 -0
  185. data/test/factories/service/sc/gaspar/cancela_nfse.rb +9 -0
  186. data/test/factories/service/sc/gaspar/consulta_lote_rps.rb +7 -0
  187. data/test/factories/service/sc/gaspar/consulta_nfs_por_rps.rb +6 -0
  188. data/test/factories/service/sc/gaspar/consulta_nfse.rb +8 -0
  189. data/test/factories/service/sc/gaspar/consulta_situacao_lote_rps.rb +6 -0
  190. data/test/factories/service/sc/gaspar/recepcao_lote_rps.rb +9 -0
  191. data/test/factories/service/sc/gaspar/recepcao_lote_rps_limitado.rb +9 -0
  192. data/test/factories/service/thema/v1/base.rb +7 -0
  193. data/test/factories/service/thema/v1/cancela_nfse.rb +9 -0
  194. data/test/factories/service/thema/v1/consulta_lote_rps.rb +7 -0
  195. data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +6 -0
  196. data/test/factories/service/thema/v1/consulta_nfse.rb +8 -0
  197. data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +6 -0
  198. data/test/factories/service/thema/v1/recepcao_lote_rps.rb +9 -0
  199. data/test/factories/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -0
  200. data/test/test_helper.rb +42 -0
  201. metadata +338 -121
  202. data/lib/br_nfe/servico/base.rb +0 -35
  203. data/lib/br_nfe/servico/betha/base.rb +0 -85
  204. data/lib/br_nfe/servico/betha/build_response.rb +0 -141
  205. data/lib/br_nfe/servico/betha/v1/build_response.rb +0 -121
  206. data/lib/br_nfe/servico/betha/v1/cancelamento_nfs.rb +0 -52
  207. data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +0 -33
  208. data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +0 -37
  209. data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +0 -51
  210. data/lib/br_nfe/servico/betha/v1/consulta_situacao_lote_rps.rb +0 -18
  211. data/lib/br_nfe/servico/betha/v1/gateway.rb +0 -125
  212. data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +0 -97
  213. data/lib/br_nfe/servico/betha/v2/build_response.rb +0 -159
  214. data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +0 -30
  215. data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +0 -30
  216. data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +0 -27
  217. data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -30
  218. data/lib/br_nfe/servico/betha/v2/gateway.rb +0 -230
  219. data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +0 -30
  220. data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +0 -52
  221. data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +0 -43
  222. data/lib/br_nfe/servico/response/default.rb +0 -34
  223. data/lib/br_nfe/servico/rps.rb +0 -108
  224. data/test/br_nfe/servico/betha/base_test.rb +0 -135
  225. data/test/br_nfe/servico/betha/v1/build_response_test.rb +0 -557
  226. data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +0 -72
  227. data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +0 -46
  228. data/test/br_nfe/servico/betha/v1/consulta_nfs_por_rps_test.rb +0 -68
  229. data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +0 -74
  230. data/test/br_nfe/servico/betha/v1/consulta_situacao_lote_rps_test.rb +0 -27
  231. data/test/br_nfe/servico/betha/v1/gateway_test.rb +0 -151
  232. data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +0 -249
  233. data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +0 -44
  234. data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +0 -38
  235. data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +0 -36
  236. data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +0 -51
  237. data/test/br_nfe/servico/betha/v2/gateway_test.rb +0 -372
  238. data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +0 -62
  239. data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +0 -108
  240. data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +0 -84
  241. data/test/br_nfe/servico/response/default_test.rb +0 -54
  242. data/test/factories/servico/base.rb +0 -5
  243. data/test/factories/servico/betha/base.rb +0 -5
  244. data/test/factories/servico/betha/v1/build_response.rb +0 -6
  245. data/test/factories/servico/betha/v1/cancelamento_nfs.rb +0 -7
  246. data/test/factories/servico/betha/v1/consulta_nfse.rb +0 -8
  247. data/test/factories/servico/betha/v1/recepcao_lote_rps.rb +0 -6
  248. data/test/factories/servico/betha/v2/cancelamento_nfs.rb +0 -7
  249. data/test/factories/servico/betha/v2/consulta_lote_rps.rb +0 -6
  250. data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +0 -6
  251. data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -5
  252. data/test/factories/servico/betha/v2/gateway.rb +0 -5
  253. data/test/factories/servico/betha/v2/gera_nfse.rb +0 -6
  254. data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +0 -5
  255. data/test/factories/servico/betha/v2/substituicao_nfse.rb +0 -8
  256. data/test/factories/servico/response/default.rb +0 -10
  257. data/test/factories/servico/rps.rb +0 -44
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class RuleCancelamentoNfsTest < BrNfe::Service::Base
4
+ include BrNfe::Service::Concerns::Rules::CancelamentoNfs
5
+ end
6
+
7
+ describe BrNfe::Service::Concerns::Rules::CancelamentoNfs do
8
+ subject { RuleCancelamentoNfsTest.new(nfe_number: 1254, codigo_cancelamento: 1, emitente: emitente) }
9
+ let(:emitente) { FactoryGirl.build(:emitente, endereco: endereco) }
10
+ let(:endereco) { FactoryGirl.build(:endereco) }
11
+
12
+ it { must validate_presence_of(:nfe_number) }
13
+ it { must validate_presence_of(:codigo_cancelamento) }
14
+
15
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+ require 'br_nfe/helper/have_rps_test'
3
+
4
+
5
+ describe BrNfe::Service::Concerns::Rules::ConsultaNfsPorRps do
6
+ class RuleConsultaNfsPorRpsTest < BrNfe::Service::Base
7
+ include BrNfe::Service::Concerns::Rules::ConsultaNfsPorRps
8
+ end
9
+
10
+ subject { RuleConsultaNfsPorRpsTest.new(rps: rps, emitente: emitente) }
11
+ let(:emitente) { FactoryGirl.build(:emitente, endereco: endereco) }
12
+ let(:endereco) { FactoryGirl.build(:endereco) }
13
+ let(:rps) { FactoryGirl.build(:br_nfe_rps) }
14
+
15
+ it "deve ter o o helper HaveRps incluido" do
16
+ subject.class.included_modules.must_include BrNfe::Helper::HaveRps
17
+ end
18
+
19
+ describe "rps" do
20
+ include BrNfeTest::HelperTest::HaveRpsTest
21
+ end
22
+
23
+ describe "#validate_rps" do
24
+ it "se o RPS for inválido deve add os erros do RPS no registro" do
25
+ rps.stubs(:errors).returns(stub(full_messages: ["Erro rps"]))
26
+ rps.stubs(:valid?).returns(false)
27
+ subject.valid?.must_equal false
28
+ subject.errors.full_messages.must_include( "Rps Erro rps" )
29
+ end
30
+ it "se o RPS for válido o registro também será valido" do
31
+ rps.stubs(:valid?).returns(true)
32
+ subject.valid?.must_equal true
33
+ subject.errors.must_be_empty
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ class RuleConsultaNfseTest < BrNfe::Service::Base
4
+ include BrNfe::Service::Concerns::Rules::ConsultaNfse
5
+ end
6
+
7
+ describe BrNfe::Service::Concerns::Rules::ConsultaNfse do
8
+ subject { RuleConsultaNfseTest.new(nfe_number: '554', start_date: 1.month.ago, end_date: Time.now, emitente: emitente) }
9
+ let(:emitente) { FactoryGirl.build(:emitente, endereco: endereco) }
10
+ let(:endereco) { FactoryGirl.build(:endereco) }
11
+ let(:rps) { FactoryGirl.build(:br_nfe_rps) }
12
+
13
+ it "deve ter o o helper HaveDestinatario incluido" do
14
+ subject.class.included_modules.must_include BrNfe::Helper::HaveDestinatario
15
+ end
16
+
17
+ it "deve ter o o helper HaveIntermediario incluido" do
18
+ subject.class.included_modules.must_include BrNfe::Helper::HaveIntermediario
19
+ end
20
+
21
+ describe "#start_date" do
22
+ it "o get do start_date deve retornar uma data no formato YYYY-MM-DD" do
23
+ subject.start_date = '20/05/2010'
24
+ subject.start_date.must_equal '2010-05-20'
25
+ end
26
+ it "se start_date for nil o get deve retornar em branco" do
27
+ subject.start_date = nil
28
+ subject.start_date.must_equal ''
29
+ end
30
+ end
31
+
32
+ describe "#end_date" do
33
+ it "o get do end_date deve retornar uma data no formato YYYY-MM-DD" do
34
+ subject.end_date = '20/08/2015'
35
+ subject.end_date.must_equal '2015-08-20'
36
+ end
37
+ it "se end_date for nil o get deve retornar em branco" do
38
+ subject.end_date = nil
39
+ subject.end_date.must_equal ''
40
+ end
41
+ end
42
+ end
@@ -1,9 +1,17 @@
1
1
  require 'test_helper'
2
2
 
3
- describe BrNfe::Servico::Base do
4
- subject { FactoryGirl.build(:br_nfe_servico_base) }
3
+ class RuleRecepcaoLoteRpsTest < BrNfe::Service::Base
4
+ include BrNfe::Service::Concerns::Rules::RecepcaoLoteRps
5
+ end
6
+
7
+ describe BrNfe::Service::Concerns::Rules::RecepcaoLoteRps do
8
+ subject { RuleRecepcaoLoteRpsTest.new(numero_lote_rps: 545, operacao: '1', emitente: emitente) }
9
+ let(:emitente) { FactoryGirl.build(:emitente, endereco: endereco) }
10
+ let(:endereco) { FactoryGirl.build(:endereco) }
5
11
  let(:rps) { FactoryGirl.build(:br_nfe_rps) }
6
-
12
+
13
+ it { must validate_presence_of(:numero_lote_rps) }
14
+
7
15
  describe "#lote_rps" do
8
16
  it "deve inicializar como um vetor vazio" do
9
17
  subject.class.new.lote_rps.must_equal []
@@ -25,7 +33,7 @@ describe BrNfe::Servico::Base do
25
33
  it "se não houver nenhum rps, deve add um erro" do
26
34
  subject.lote_rps = []
27
35
  subject.errors.full_messages.must_equal( [] )
28
- subject.send(:validar_lote_rps)
36
+ subject.valid?.must_equal false
29
37
  subject.errors.full_messages.must_equal( ["Deve conter ao menos 1 RPS"] )
30
38
  end
31
39
  context "deve validar o rps setando a opcao validar_recepcao_rps" do
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- describe BrNfe::Servico::Intermediario do
3
+ describe BrNfe::Service::Intermediario do
4
4
  subject { FactoryGirl.build(:intermediario) }
5
5
  describe "validations" do
6
6
  it { must validate_presence_of(:cpf_cnpj) }
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Service::Item do
4
+ subject { FactoryGirl.build(:service_item) }
5
+
6
+ describe "#default_values" do
7
+ context "#quantity" do
8
+ it "valor padrão deve ser 1" do
9
+ subject.class.new.quantity.must_equal 1
10
+ end
11
+ it "posso modificar o valor" do
12
+ subject.class.new(quantity: 50.88).quantity.must_equal 50.88
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "#total_value" do
18
+ it "se não for setado nenhum valor deve sempre retornar a multiplicação entre a quantidade e o valor unitário" do
19
+ subject.total_value = nil
20
+ subject.assign_attributes(quantity: 3.5, unit_value: 10.0)
21
+ subject.total_value.must_equal 35.0
22
+ end
23
+ it "se setar um valor em total_value não deve multiplicar a quantidade com o valor unitário" do
24
+ subject.total_value = 66.0
25
+ subject.assign_attributes(quantity: 3.5, unit_value: 10.0)
26
+ subject.total_value.must_equal 66.0
27
+ end
28
+ it "se quantidade ou valor unitário forem nil deve retornar zero" do
29
+ subject.total_value = nil
30
+ subject.assign_attributes(quantity: nil, unit_value: nil)
31
+ subject.total_value.must_equal 0.0
32
+ end
33
+ end
34
+ end
@@ -1,37 +1,45 @@
1
1
  require 'test_helper'
2
2
 
3
- describe BrNfe::Servico::Rps do
3
+ describe BrNfe::Service::Rps do
4
4
  subject { FactoryGirl.build(:br_nfe_rps) }
5
5
  let(:destinatario) { FactoryGirl.build(:destinatario) }
6
6
  let(:intermediario) { FactoryGirl.build(:intermediario) }
7
7
  let(:condicao_pagamento) { FactoryGirl.build(:condicao_pagamento) }
8
+ let(:item_1) { FactoryGirl.build(:service_item) }
9
+ let(:item_2) { FactoryGirl.build(:service_item) }
8
10
 
9
11
  describe "validations" do
10
12
  it { must validate_presence_of(:numero) }
11
13
  it { must validate_presence_of(:serie) }
12
14
  it { must validate_presence_of(:tipo) }
15
+ context "Quando #validate_rps? for false os valores de RPS não devem ser obrigatórios" do
16
+ before { subject.stubs(:validate_rps?).returns(false) }
17
+ it { wont validate_presence_of(:numero) }
18
+ it { wont validate_presence_of(:serie) }
19
+ it { wont validate_presence_of(:tipo) }
20
+ end
13
21
 
14
22
  describe "option validar_recepcao_rps" do
15
23
  context "quando for true" do
16
24
  before { subject.validar_recepcao_rps = true }
17
25
  it { must validate_presence_of(:data_emissao) }
18
26
  it { must validate_presence_of(:item_lista_servico) }
19
- it { must validate_presence_of(:discriminacao) }
27
+ it { must validate_presence_of(:description) }
20
28
  it { must validate_presence_of(:codigo_municipio) }
21
- it { must validate_presence_of(:valor_servicos) }
22
- it { must validate_presence_of(:base_calculo) }
29
+ it { must validate_numericality_of(:total_services).is_greater_than(0) }
30
+ it { must validate_numericality_of(:base_calculation).is_greater_than(0) }
23
31
 
24
- it { must validate_numericality_of(:valor_servicos) }
25
- it { must validate_numericality_of(:valor_deducoes) }
32
+ it { must validate_numericality_of(:total_services) }
33
+ it { must validate_numericality_of(:deductions) }
26
34
  it { must validate_numericality_of(:valor_pis) }
27
35
  it { must validate_numericality_of(:valor_cofins) }
28
36
  it { must validate_numericality_of(:valor_inss) }
29
37
  it { must validate_numericality_of(:valor_ir) }
30
38
  it { must validate_numericality_of(:valor_csll) }
31
39
  it { must validate_numericality_of(:outras_retencoes) }
32
- it { must validate_numericality_of(:valor_iss) }
33
- it { must validate_numericality_of(:aliquota) }
34
- it { must validate_numericality_of(:base_calculo) }
40
+ it { must validate_numericality_of(:total_iss) }
41
+ it { must validate_numericality_of(:iss_tax_rate) }
42
+ it { must validate_numericality_of(:base_calculation) }
35
43
  it { must validate_numericality_of(:desconto_incondicionado) }
36
44
  it { must validate_numericality_of(:desconto_condicionado) }
37
45
 
@@ -45,16 +53,16 @@ describe BrNfe::Servico::Rps do
45
53
  subject.valid?
46
54
  end
47
55
 
48
- describe "option iss_retido?" do
56
+ describe "option iss_retained?" do
49
57
  context "quando for true" do
50
- before { subject.stubs(:iss_retido?).returns(true) }
51
- it { wont validate_presence_of(:valor_iss) }
52
- it { wont validate_presence_of(:aliquota) }
58
+ before { subject.stubs(:iss_retained?).returns(true) }
59
+ it { wont validate_presence_of(:total_iss) }
60
+ it { wont validate_presence_of(:iss_tax_rate) }
53
61
  end
54
62
  context "quando for false" do
55
- before { subject.stubs(:iss_retido?).returns(false) }
56
- it { must validate_presence_of(:valor_iss) }
57
- it { must validate_presence_of(:aliquota) }
63
+ before { subject.stubs(:iss_retained?).returns(false) }
64
+ it { must validate_presence_of(:total_iss) }
65
+ it { must validate_presence_of(:iss_tax_rate) }
58
66
  end
59
67
  end
60
68
  end
@@ -63,22 +71,22 @@ describe BrNfe::Servico::Rps do
63
71
  before { subject.validar_recepcao_rps = false }
64
72
  it { wont validate_presence_of(:data_emissao) }
65
73
  it { wont validate_presence_of(:item_lista_servico) }
66
- it { wont validate_presence_of(:discriminacao) }
74
+ it { wont validate_presence_of(:description) }
67
75
  it { wont validate_presence_of(:codigo_municipio) }
68
- it { wont validate_presence_of(:valor_servicos) }
69
- it { wont validate_presence_of(:base_calculo) }
76
+ it { wont validate_numericality_of(:total_services).is_greater_than(0) }
77
+ it { wont validate_numericality_of(:base_calculation).is_greater_than(0) }
70
78
 
71
- it { wont validate_numericality_of(:valor_servicos) }
72
- it { wont validate_numericality_of(:valor_deducoes) }
79
+ it { wont validate_numericality_of(:total_services) }
80
+ it { wont validate_numericality_of(:deductions) }
73
81
  it { wont validate_numericality_of(:valor_pis) }
74
82
  it { wont validate_numericality_of(:valor_cofins) }
75
83
  it { wont validate_numericality_of(:valor_inss) }
76
84
  it { wont validate_numericality_of(:valor_ir) }
77
85
  it { wont validate_numericality_of(:valor_csll) }
78
86
  it { wont validate_numericality_of(:outras_retencoes) }
79
- it { wont validate_numericality_of(:valor_iss) }
80
- it { wont validate_numericality_of(:aliquota) }
81
- it { wont validate_numericality_of(:base_calculo) }
87
+ it { wont validate_numericality_of(:total_iss) }
88
+ it { wont validate_numericality_of(:iss_tax_rate) }
89
+ it { wont validate_numericality_of(:base_calculation) }
82
90
  it { wont validate_numericality_of(:desconto_incondicionado) }
83
91
  it { wont validate_numericality_of(:desconto_condicionado) }
84
92
 
@@ -92,16 +100,16 @@ describe BrNfe::Servico::Rps do
92
100
  subject.valid?
93
101
  end
94
102
 
95
- describe "option iss_retido?" do
103
+ describe "option iss_retained?" do
96
104
  context "quando for true" do
97
- before { subject.stubs(:iss_retido?).returns(true) }
98
- it { wont validate_presence_of(:valor_iss) }
99
- it { wont validate_presence_of(:aliquota) }
105
+ before { subject.stubs(:iss_retained?).returns(true) }
106
+ it { wont validate_presence_of(:total_iss) }
107
+ it { wont validate_presence_of(:iss_tax_rate) }
100
108
  end
101
109
  context "quando for false" do
102
- before { subject.stubs(:iss_retido?).returns(false) }
103
- it { wont validate_presence_of(:valor_iss) }
104
- it { wont validate_presence_of(:aliquota) }
110
+ before { subject.stubs(:iss_retained?).returns(false) }
111
+ it { wont validate_presence_of(:total_iss) }
112
+ it { wont validate_presence_of(:iss_tax_rate) }
105
113
  end
106
114
  end
107
115
  end
@@ -109,31 +117,31 @@ describe BrNfe::Servico::Rps do
109
117
 
110
118
  end
111
119
 
112
- describe "#contem_substituicao?" do
120
+ describe "#replace_invoice?" do
113
121
  before do
114
122
  subject.assign_attributes(numero_substituicao: '1', serie_substituicao: '2', tipo_substituicao: '1')
115
123
  end
116
124
  it "true se numero_substituicao, serie_substituicao e tipo_substituicao tiver algum valor" do
117
- subject.contem_substituicao?.must_equal true
125
+ subject.replace_invoice?.must_equal true
118
126
  end
119
127
  it "false se numero_substituicao não tiver valor" do
120
128
  subject.numero_substituicao = ''
121
- subject.contem_substituicao?.must_equal false
129
+ subject.replace_invoice?.must_equal false
122
130
  end
123
131
  it "false se serie_substituicao não tiver valor" do
124
132
  subject.serie_substituicao = ''
125
- subject.contem_substituicao?.must_equal false
133
+ subject.replace_invoice?.must_equal false
126
134
  end
127
135
  it "false se tipo_substituicao não tiver valor" do
128
136
  subject.tipo_substituicao = ''
129
- subject.contem_substituicao?.must_equal false
137
+ subject.replace_invoice?.must_equal false
130
138
  end
131
139
  end
132
140
 
133
141
 
134
142
  describe "#destinatario" do
135
143
  it "sempre deve retornar um objeto BrNfe::Destinatario" do
136
- novo = BrNfe::Servico::Rps.new
144
+ novo = BrNfe::Service::Rps.new
137
145
  novo.destinatario.class.must_equal BrNfe::Destinatario
138
146
  novo.destinatario = nil
139
147
  novo.destinatario.class.must_equal BrNfe::Destinatario
@@ -144,7 +152,7 @@ describe BrNfe::Servico::Rps do
144
152
  it "a classe do destinatario deve segir a configuração de BrNfe.destinatario_class" do
145
153
  BrNfe.destinatario_class = BrNfe::Emitente
146
154
 
147
- novo = BrNfe::Servico::Rps.new
155
+ novo = BrNfe::Service::Rps.new
148
156
  novo.destinatario.class.must_equal BrNfe::Emitente
149
157
  novo.destinatario = nil
150
158
  novo.destinatario.class.must_equal BrNfe::Emitente
@@ -189,7 +197,7 @@ describe BrNfe::Servico::Rps do
189
197
 
190
198
  describe "#intermediario" do
191
199
  it "valor padrão é nil" do
192
- novo = BrNfe::Servico::Rps.new
200
+ novo = BrNfe::Service::Rps.new
193
201
  novo.intermediario.must_be_nil
194
202
  novo.intermediario = 'outro valor qualquer'
195
203
  novo.intermediario.must_be_nil
@@ -198,7 +206,7 @@ describe BrNfe::Servico::Rps do
198
206
  it "a classe do intermediario deve segir a configuração de BrNfe.intermediario_class" do
199
207
  BrNfe.intermediario_class = BrNfe::Emitente
200
208
 
201
- novo = BrNfe::Servico::Rps.new(intermediario: BrNfe::Emitente.new)
209
+ novo = BrNfe::Service::Rps.new(intermediario: BrNfe::Emitente.new)
202
210
  novo.intermediario.class.must_equal BrNfe::Emitente
203
211
 
204
212
  novo.intermediario = nil
@@ -207,7 +215,7 @@ describe BrNfe::Servico::Rps do
207
215
  novo.intermediario = 'outro valor qualquer'
208
216
  novo.intermediario.must_be_nil
209
217
 
210
- BrNfe.intermediario_class = BrNfe::Servico::Intermediario
218
+ BrNfe.intermediario_class = BrNfe::Service::Intermediario
211
219
  end
212
220
 
213
221
  it "atributos pode ser atribuidos em forma de bloco" do
@@ -259,7 +267,7 @@ describe BrNfe::Servico::Rps do
259
267
 
260
268
  describe "#condicao_pagamento" do
261
269
  it "valor padrão é nil" do
262
- novo = BrNfe::Servico::Rps.new
270
+ novo = BrNfe::Service::Rps.new
263
271
  novo.condicao_pagamento.must_be_nil
264
272
  novo.condicao_pagamento = 'outro valor qualquer'
265
273
  novo.condicao_pagamento.must_be_nil
@@ -268,7 +276,7 @@ describe BrNfe::Servico::Rps do
268
276
  it "a classe do condicao_pagamento deve segir a configuração de BrNfe.condicao_pagamento_class" do
269
277
  BrNfe.condicao_pagamento_class = BrNfe::Emitente
270
278
 
271
- novo = BrNfe::Servico::Rps.new(condicao_pagamento: BrNfe::Emitente.new)
279
+ novo = BrNfe::Service::Rps.new(condicao_pagamento: BrNfe::Emitente.new)
272
280
  novo.condicao_pagamento.class.must_equal BrNfe::Emitente
273
281
 
274
282
  novo.condicao_pagamento = nil
@@ -352,4 +360,144 @@ describe BrNfe::Servico::Rps do
352
360
  end
353
361
  end
354
362
 
363
+ describe "#items" do
364
+ it "deve inicializar como um vetor vazio" do
365
+ subject.class.new.items.must_equal []
366
+ end
367
+
368
+ it "posso utilizar o << para adicionar valores" do
369
+ subject.items << item_1
370
+ subject.items << item_2
371
+ subject.items.must_equal [item_1,item_2]
372
+ end
373
+
374
+ it "sempre retorna um array" do
375
+ subject.items = item_2
376
+ subject.items.must_equal [item_2]
377
+ end
378
+
379
+ it "não permite adicionar outro objeto a não ser o definido pela class BrNfe.service_item_class" do
380
+ class CustomClass
381
+ end
382
+ c_class_1 = CustomClass.new
383
+ c_class_2 = CustomClass.new
384
+ BrNfe.service_item_class = CustomClass
385
+
386
+ subject.items << c_class_1
387
+ subject.items << c_class_2
388
+ subject.items << item_1
389
+ subject.items.must_equal [c_class_1, c_class_2]
390
+
391
+ subject.items = 'item_2'
392
+ subject.items.must_equal []
393
+
394
+ BrNfe.service_item_class = BrNfe::Service::Item
395
+ end
396
+ end
397
+
398
+ describe "#total_services" do
399
+ it "se não setar valor em total_services deve somar o total_value de todos os items" do
400
+ subject.total_services = nil
401
+ item_1.total_value = 55.70
402
+ item_2.total_value = 40.35
403
+ subject.items = [item_1, item_2]
404
+
405
+ subject.total_services.must_equal 96.05
406
+ end
407
+ it "se não houver itens e nem um valor setado deve retornar zero" do
408
+ subject.total_services = nil
409
+ subject.items = []
410
+
411
+ subject.total_services.must_equal 0.0
412
+ end
413
+ it "se setar um valor deve retornar esse valor e não pode somar dos itens" do
414
+ subject.total_services = 47.0
415
+ item_1.total_value = 55.70
416
+ item_2.total_value = 40.35
417
+ subject.items = [item_1, item_2]
418
+
419
+ subject.total_services.must_equal 47.0
420
+ end
421
+ end
422
+
423
+ describe "#base_calculation" do
424
+ it "se não setar valor em base_calculation deve subtratir o total_services com deductions" do
425
+ subject.assign_attributes({
426
+ base_calculation: nil,
427
+ total_services: 100.0,
428
+ deductions: 4.500000555
429
+ })
430
+
431
+ subject.base_calculation.must_equal 95.5
432
+ end
433
+ it "deve retornar zero se não houver valor em base_calculation e nem em total_services ou deductions" do
434
+ subject.assign_attributes({
435
+ base_calculation: nil,
436
+ total_services: nil,
437
+ deductions: nil
438
+ })
439
+
440
+ subject.base_calculation.must_equal 0.0
441
+ end
442
+ it "se setar um valor deve retornar esse valor e não pode celcular o total_services subtraindo as deductions" do
443
+ subject.assign_attributes({
444
+ base_calculation: 200,
445
+ total_services: 100,
446
+ deductions: 50
447
+ })
448
+
449
+ subject.base_calculation.must_equal 200
450
+ end
451
+ end
452
+
453
+ describe "#iss_tax_rate" do
454
+ it "deve pegar o valor de iss_tax_rate do primeiro item se não houver valor setado em iss_tax_rate do RPS" do
455
+ subject.iss_tax_rate = nil
456
+ item_1.iss_tax_rate = 0.3
457
+ item_2.iss_tax_rate = 0.4
458
+ subject.items = [item_2, item_1]
459
+
460
+ subject.iss_tax_rate.must_equal 0.4
461
+ end
462
+ it "Deve retornar nil se não houver itens e nem um valor setado" do
463
+ subject.iss_tax_rate = nil
464
+ subject.items = []
465
+
466
+ subject.iss_tax_rate.must_be_nil
467
+ end
468
+ it "se setar um valor deve retornar esse valor e não pode pegar dos itens" do
469
+ subject.iss_tax_rate = 0.4
470
+ item_1.total_value = 0.1
471
+ item_2.total_value = 0.2
472
+ subject.items = [item_1, item_2]
473
+
474
+ subject.iss_tax_rate.must_equal 0.4
475
+ end
476
+ end
477
+
478
+ describe "#cnae_code" do
479
+ it "deve pegar o valor de cnae_code do primeiro item se não houver valor setado em cnae_code do RPS" do
480
+ subject.cnae_code = nil
481
+ item_1.cnae_code = '11111'
482
+ item_2.cnae_code = '22222'
483
+ subject.items = [item_2, item_1]
484
+
485
+ subject.cnae_code.must_equal '22222'
486
+ end
487
+ it "Deve retornar nil se não houver itens e nem um valor setado" do
488
+ subject.cnae_code = nil
489
+ subject.items = []
490
+
491
+ subject.cnae_code.must_be_nil
492
+ end
493
+ it "se setar um valor deve retornar esse valor e não pode pegar dos itens" do
494
+ subject.cnae_code = '2'
495
+ item_1.total_value = '3'
496
+ item_2.total_value = '4'
497
+ subject.items = [item_1, item_2]
498
+
499
+ subject.cnae_code.must_equal '2'
500
+ end
501
+ end
502
+
355
503
  end