br_nfe 1.1.0 → 2.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 (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