br_nfe 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +0 -1
  4. data/Gemfile.lock +1 -1
  5. data/README.markdown +264 -106
  6. data/lib/br_nfe/{helper → association}/have_address.rb +1 -1
  7. data/lib/br_nfe/{helper → association}/have_condicao_pagamento.rb +1 -1
  8. data/lib/br_nfe/association/have_destinatario.rb +22 -0
  9. data/lib/br_nfe/association/have_emitente.rb +24 -0
  10. data/lib/br_nfe/base.rb +37 -27
  11. data/lib/br_nfe/condicao_pagamento.rb +2 -0
  12. data/lib/br_nfe/constants.rb +33 -0
  13. data/lib/br_nfe/endereco.rb +10 -0
  14. data/lib/br_nfe/helper/string_methods.rb +4 -0
  15. data/lib/br_nfe/{emitente.rb → person.rb} +11 -7
  16. data/lib/br_nfe/product/base.rb +82 -0
  17. data/lib/br_nfe/product/consulta_status_servico.rb +35 -0
  18. data/lib/br_nfe/product/emitente.rb +8 -0
  19. data/lib/br_nfe/product/gateway/base.rb +62 -0
  20. data/lib/br_nfe/product/gateway/web_service_svrs.rb +39 -0
  21. data/lib/br_nfe/product/value_nf.rb +9 -0
  22. data/lib/br_nfe/product/xml/soap_env.xml.slim +8 -0
  23. data/lib/br_nfe/product/xml/v3_10/XSD/consReciNFe_v3.10.xsd +9 -0
  24. data/lib/br_nfe/product/xml/v3_10/XSD/consSitNFe_v3.10.xsd +9 -0
  25. data/lib/br_nfe/product/xml/v3_10/XSD/consStatServ_v3.10.xsd +9 -0
  26. data/lib/br_nfe/product/xml/v3_10/XSD/enviNFe_v3.10.xsd +9 -0
  27. data/lib/br_nfe/product/xml/v3_10/XSD/inutNFe_v3.10.xsd +9 -0
  28. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsSitNFe_v3.10.xsd +502 -0
  29. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsStatServ_v3.10.xsd +98 -0
  30. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteInutNFe_v3.10.xsd +193 -0
  31. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteNFe_v3.10.xsd +6060 -0
  32. data/lib/br_nfe/product/xml/v3_10/XSD/nfe_v3.10.xsd +9 -0
  33. data/lib/br_nfe/product/xml/v3_10/XSD/procInutNFe_v3.10.xsd +9 -0
  34. data/lib/br_nfe/product/xml/v3_10/XSD/procNFe_v3.10.xsd +9 -0
  35. data/lib/br_nfe/product/xml/v3_10/XSD/retConsReciNFe_v3.10.xsd +9 -0
  36. data/lib/br_nfe/product/xml/v3_10/XSD/retConsSitNFe_v3.10.xsd +9 -0
  37. data/lib/br_nfe/product/xml/v3_10/XSD/retConsStatServ_v3.10.xsd +9 -0
  38. data/lib/br_nfe/product/xml/v3_10/XSD/retEnviNFe_v3.10.xsd +9 -0
  39. data/lib/br_nfe/product/xml/v3_10/XSD/retInutNFe_v3.10.xsd +9 -0
  40. data/lib/br_nfe/product/xml/v3_10/XSD/tiposBasico_v3.10.xsd +571 -0
  41. data/lib/br_nfe/product/xml/v3_10/XSD/xmldsig-core-schema_v1.01.xsd +98 -0
  42. data/lib/br_nfe/product/xml/v3_10/consulta_status_servico.xml.slim +4 -0
  43. data/lib/br_nfe/service/association/have_intermediario.rb +26 -0
  44. data/lib/br_nfe/service/association/have_rps.rb +36 -0
  45. data/lib/br_nfe/service/base.rb +24 -20
  46. data/lib/br_nfe/service/betha/v1/cancela_nfse.rb +43 -0
  47. data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +20 -6
  48. data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +17 -6
  49. data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +16 -5
  50. data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +15 -6
  51. data/lib/br_nfe/service/betha/v1/gateway.rb +4 -0
  52. data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +13 -5
  53. data/lib/br_nfe/service/betha/v1/xml/_tc_identificacao_prestador.xml.slim +3 -0
  54. data/lib/br_nfe/service/betha/v1/xml/_tc_pedido_cancelamento.xml.slim +4 -0
  55. data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +8 -0
  56. data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +1 -1
  57. data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +5 -2
  58. data/lib/br_nfe/service/concerns/values_ts/service_v1.rb +319 -0
  59. data/lib/br_nfe/service/destinatario.rb +7 -0
  60. data/lib/br_nfe/service/emitente.rb +8 -0
  61. data/lib/br_nfe/service/intermediario.rb +1 -12
  62. data/lib/br_nfe/service/item.rb +7 -7
  63. data/lib/br_nfe/service/response/build/base.rb +166 -0
  64. data/lib/br_nfe/service/response/build/cancelamento.rb +62 -0
  65. data/lib/br_nfe/service/response/build/consulta_lote_rps.rb +25 -0
  66. data/lib/br_nfe/service/response/build/consulta_nfs_por_rps.rb +25 -0
  67. data/lib/br_nfe/service/response/build/consulta_nfse.rb +24 -0
  68. data/lib/br_nfe/service/response/build/consulta_situacao_lote_rps.rb +56 -0
  69. data/lib/br_nfe/service/response/build/invoice_build.rb +359 -0
  70. data/lib/br_nfe/service/response/build/recepcao_lote_rps.rb +69 -0
  71. data/lib/br_nfe/service/response/cancelamento.rb +22 -0
  72. data/lib/br_nfe/service/response/consulta_lote_rps.rb +18 -0
  73. data/lib/br_nfe/service/response/consulta_nfs_por_rps.rb +10 -0
  74. data/lib/br_nfe/service/response/consulta_nfse.rb +10 -0
  75. data/lib/br_nfe/service/response/consulta_situacao_lote_rps.rb +74 -0
  76. data/lib/br_nfe/service/response/default.rb +93 -0
  77. data/lib/br_nfe/{response/service → service/response}/nota_fiscal.rb +19 -12
  78. data/lib/br_nfe/service/response/paths/v1/tc_nfse.rb +275 -0
  79. data/lib/br_nfe/service/response/recepcao_lote_rps.rb +35 -0
  80. data/lib/br_nfe/service/rps.rb +30 -27
  81. data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +4 -4
  82. data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +4 -4
  83. data/lib/br_nfe/service/simpliss/v1/cancela_nfse.rb +16 -6
  84. data/lib/br_nfe/service/simpliss/v1/consulta_lote_rps.rb +20 -12
  85. data/lib/br_nfe/service/simpliss/v1/consulta_nfs_por_rps.rb +21 -6
  86. data/lib/br_nfe/service/simpliss/v1/consulta_nfse.rb +20 -6
  87. data/lib/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps.rb +17 -6
  88. data/lib/br_nfe/service/simpliss/v1/recepcao_lote_rps.rb +16 -4
  89. data/lib/br_nfe/service/simpliss/v1/xml/_tc_item_servico.xml.slim +2 -2
  90. data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +21 -19
  91. data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +21 -19
  92. data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +25 -18
  93. data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +20 -20
  94. data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +14 -20
  95. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +11 -16
  96. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -6
  97. data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +1 -1
  98. data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +1 -1
  99. data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +11 -11
  100. data/lib/br_nfe/version.rb +1 -1
  101. data/lib/br_nfe.rb +62 -62
  102. data/test/br_nfe/association/have_address_test.rb +64 -0
  103. data/test/br_nfe/association/have_condicao_pagamento_test.rb +75 -0
  104. data/test/br_nfe/association/have_destinatario_test.rb +76 -0
  105. data/test/br_nfe/association/have_emitente_test.rb +80 -0
  106. data/test/br_nfe/base_test.rb +96 -61
  107. data/test/br_nfe/endereco_test.rb +21 -0
  108. data/test/br_nfe/person_test.rb +55 -0
  109. data/test/br_nfe/product/base_test.rb +150 -0
  110. data/test/br_nfe/product/consulta_status_servico_test.rb +59 -0
  111. data/test/br_nfe/product/emitente_test.rb +29 -0
  112. data/test/br_nfe/product/gateway/base_test.rb +16 -0
  113. data/test/br_nfe/product/gateway/web_service_svrs_test.rb +36 -0
  114. data/test/br_nfe/service/association/have_intermediario_test.rb +80 -0
  115. data/test/br_nfe/service/association/have_rps_test.rb +62 -0
  116. data/test/br_nfe/service/base_test.rb +42 -42
  117. data/test/br_nfe/service/betha/v1/cancela_nfse_test.rb +90 -0
  118. data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +105 -5
  119. data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +103 -5
  120. data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +114 -5
  121. data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +118 -5
  122. data/test/br_nfe/service/betha/v1/gateway_test.rb +1 -1
  123. data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +51 -5
  124. data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +2 -2
  125. data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +2 -7
  126. data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +24 -3
  127. data/test/br_nfe/service/concerns/rules/recepcao_lote_rps_test.rb +1 -1
  128. data/test/br_nfe/{helper → service/concerns}/values_ts/service_v1_test.rb +2 -2
  129. data/test/br_nfe/{destinatario_test.rb → service/destinatario_test.rb} +3 -4
  130. data/test/br_nfe/service/emitente_test.rb +29 -0
  131. data/test/br_nfe/service/item_test.rb +14 -14
  132. data/test/br_nfe/service/response/build/base_test.rb +80 -0
  133. data/test/br_nfe/{response/service → service/response}/default_test.rb +1 -82
  134. data/test/br_nfe/service/response/nota_fiscal_test.rb +59 -0
  135. data/test/br_nfe/{response/service → service/response}/paths/v1/tc_nfse_test.rb +10 -10
  136. data/test/br_nfe/service/rps_test.rb +107 -138
  137. data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +9 -9
  138. data/test/br_nfe/service/simpliss/v1/base_test.rb +1 -1
  139. data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +7 -10
  140. data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +11 -18
  141. data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +11 -18
  142. data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +11 -18
  143. data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +7 -11
  144. data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +3 -9
  145. data/test/br_nfe/service/thema/v1/base_test.rb +1 -1
  146. data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +7 -14
  147. data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +6 -17
  148. data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +6 -13
  149. data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +11 -18
  150. data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +7 -11
  151. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +1 -5
  152. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +3 -9
  153. data/test/factories/base.rb +0 -1
  154. data/test/factories/{emitente.rb → person.rb} +1 -1
  155. data/test/factories/product/base.rb +12 -0
  156. data/test/factories/product/consulta_status_servico.rb +12 -0
  157. data/test/factories/product/emitente.rb +15 -0
  158. data/test/factories/product/gateway/base.rb +5 -0
  159. data/test/factories/product/gateway/web_service_svrs.rb +5 -0
  160. data/test/factories/service/betha/v1/{cancelamento_nfs.rb → cancela_nfse.rb} +2 -1
  161. data/test/factories/service/betha/v1/consulta_lote_rps.rb +1 -1
  162. data/test/factories/service/betha/v1/consulta_nfs_por_rps.rb +1 -1
  163. data/test/factories/service/betha/v1/consulta_nfse.rb +1 -1
  164. data/test/factories/service/betha/v1/consulta_situacao_lote_rps.rb +1 -1
  165. data/test/factories/{destinatario.rb → service/destinatario.rb} +1 -1
  166. data/test/factories/service/emitente.rb +15 -0
  167. data/test/factories/service/item.rb +4 -4
  168. data/test/factories/service/response/build_response.rb +5 -0
  169. data/test/factories/service/response/default.rb +6 -0
  170. data/test/factories/{response/service → service/response}/nota_fiscal.rb +8 -8
  171. data/test/factories/service/rps.rb +11 -11
  172. data/test/factories/service/sc/florianopolis/base.rb +1 -1
  173. data/test/factories/service/sc/florianopolis/cancellation.rb +1 -1
  174. data/test/factories/service/sc/florianopolis/emission_rps.rb +1 -1
  175. data/test/factories/service/simpliss/v1/base.rb +1 -1
  176. data/test/factories/service/simpliss/v1/cancela_nfse.rb +1 -1
  177. data/test/factories/service/simpliss/v1/consulta_lote_rps.rb +1 -1
  178. data/test/factories/service/simpliss/v1/consulta_nfs_por_rps.rb +1 -1
  179. data/test/factories/service/simpliss/v1/consulta_nfse.rb +1 -1
  180. data/test/factories/service/simpliss/v1/consulta_situacao_lote_rps.rb +1 -1
  181. data/test/factories/service/simpliss/v1/recepcao_lote_rps.rb +1 -1
  182. data/test/factories/service/thema/v1/base.rb +1 -1
  183. data/test/factories/service/thema/v1/cancela_nfse.rb +1 -1
  184. data/test/factories/service/thema/v1/consulta_lote_rps.rb +1 -1
  185. data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +1 -1
  186. data/test/factories/service/thema/v1/consulta_nfse.rb +1 -1
  187. data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +1 -1
  188. data/test/factories/service/thema/v1/recepcao_lote_rps.rb +1 -1
  189. data/test/fixtures/service/response/betha/v1/cancela_nfse/fault.xml +17 -0
  190. data/test/fixtures/service/response/betha/v1/cancela_nfse/success.xml +48 -0
  191. data/test/fixtures/service/response/betha/v1/consulta_lote_rps/fault.xml +18 -0
  192. data/test/fixtures/service/response/betha/v1/consulta_lote_rps/success.xml +108 -0
  193. data/test/fixtures/service/response/betha/v1/consulta_nfse/fault.xml +18 -0
  194. data/test/fixtures/service/response/betha/v1/consulta_nfse/nfs_empty.xml +12 -0
  195. data/test/fixtures/service/response/betha/v1/consulta_nfse/success.xml +115 -0
  196. data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/fault.xml +18 -0
  197. data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/success.xml +103 -0
  198. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/error.xml +13 -0
  199. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/fault.xml +17 -0
  200. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/success.xml +13 -0
  201. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed.xml +13 -0
  202. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed_by_code_error.xml +17 -0
  203. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived.xml +13 -0
  204. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived_by_code_error.xml +17 -0
  205. data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/error.xml +17 -0
  206. data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/success.xml +14 -0
  207. metadata +160 -94
  208. data/lib/br_nfe/destinatario.rb +0 -26
  209. data/lib/br_nfe/helper/have_destinatario.rb +0 -18
  210. data/lib/br_nfe/helper/have_emitente.rb +0 -20
  211. data/lib/br_nfe/helper/have_intermediario.rb +0 -24
  212. data/lib/br_nfe/helper/have_rps.rb +0 -34
  213. data/lib/br_nfe/helper/values_ts/service_v1.rb +0 -317
  214. data/lib/br_nfe/response/service/build_response.rb +0 -463
  215. data/lib/br_nfe/response/service/default.rb +0 -185
  216. data/lib/br_nfe/response/service/paths/base.rb +0 -127
  217. data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +0 -22
  218. data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +0 -25
  219. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +0 -25
  220. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +0 -25
  221. data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
  222. data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +0 -36
  223. data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +0 -271
  224. data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +0 -36
  225. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -23
  226. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -21
  227. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -21
  228. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -22
  229. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -25
  230. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -25
  231. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -25
  232. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
  233. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_enviar_lote_rps_resposta.rb +0 -36
  234. data/lib/br_nfe/service/thema/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -17
  235. data/lib/br_nfe/service/thema/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -19
  236. data/test/br_nfe/emitente_test.rb +0 -46
  237. data/test/br_nfe/helper/have_address_test.rb +0 -62
  238. data/test/br_nfe/helper/have_condicao_pagamento_test.rb +0 -71
  239. data/test/br_nfe/helper/have_destinatario_test.rb +0 -64
  240. data/test/br_nfe/helper/have_emitente_test.rb +0 -63
  241. data/test/br_nfe/helper/have_intermediario_test.rb +0 -77
  242. data/test/br_nfe/helper/have_rps_test.rb +0 -59
  243. data/test/br_nfe/response/service/build_response_test.rb +0 -205
  244. data/test/br_nfe/response/service/nota_fiscal_test.rb +0 -41
  245. data/test/br_nfe/response/service/paths/base_test.rb +0 -196
  246. data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +0 -25
  247. data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +0 -30
  248. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +0 -30
  249. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +0 -30
  250. data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +0 -30
  251. data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +0 -34
  252. data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +0 -54
  253. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +0 -16
  254. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +0 -16
  255. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +0 -16
  256. data/test/factories/response/service/build_response.rb +0 -5
  257. data/test/factories/response/service/default.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea6a1eaa1f98eb411c09920514df79554940ad0d
4
- data.tar.gz: 8b05a7fd858d2e170dfb265ed3fb24cce070897b
3
+ metadata.gz: 2d1320a14fd1cfd5849a39a3a44a214c94aa8e0f
4
+ data.tar.gz: 25a0a4d8eea87e877f791e728ecc30b8cda3fe67
5
5
  SHA512:
6
- metadata.gz: 0472708c6a76b15978beb4ea13eed887839e5fc6375fe862a64f10f8820bb1a5214e55a33ae42291357bbf9ffd0b8b1748b54d4bad4588e24c63a58a18529985
7
- data.tar.gz: 0fb2ab18fd1a9e2068d14be52572e1f2bec77390a654abc9ebdef6cba583d977935562a4b5e245aee7beb8bc27392fb5ed2ddea51628ad11cafd8a4b33dee618
6
+ metadata.gz: de121c683a16f145d1f05309e1b24071339033ef0e7e5b5ac0600206ec4d79aead4c884ef3b8e9329c674747489a8ec24e945d88fb3edeebf13ed129f89e7b0a
7
+ data.tar.gz: 2e48ba4c89749380ba4e63b74028b987581507c712983fad01550d74d610c109a4efbfaa1f99ba3305f6328ba197d4db25fd9111f16966b6789f59f1c0d03295
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ coverage/
3
3
  **/*.subl*
4
4
  **/*.~lock.*
5
5
  dev_load_data.rb
6
+ br_nfe*.gem
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.0
4
- - 2.2.2
5
4
  - 2.3.0
6
5
  addons:
7
6
  code_climate:
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- br_nfe (2.1.0)
4
+ br_nfe (2.1.1)
5
5
  activemodel (~> 4)
6
6
  activesupport (~> 4)
7
7
  nokogiri (~> 1.6)
data/README.markdown CHANGED
@@ -1,14 +1,11 @@
1
- [![Build Status](https://travis-ci.org/Brunomm/br_nfe.svg?branch=master)](https://travis-ci.org/Brunomm/br_nfe)
2
- [![Test Coverage](https://codeclimate.com/github/Brunomm/br_nfe/badges/coverage.svg)](https://codeclimate.com/github/Brunomm/br_nfe/coverage)
3
- [![Gem Version](https://badge.fury.io/rb/br_nfe.svg)](http://badge.fury.io/rb/br_nfe)
4
- [![Code Climate](https://codeclimate.com/github/Brunomm/br_nfe/badges/gpa.svg)](https://codeclimate.com/github/Brunomm/br_nfe)
1
+ [![Build Status](https://travis-ci.org/Brunomm/br_nfe.svg?branch=master)](https://travis-ci.org/Brunomm/br_nfe) [![Test Coverage](https://codeclimate.com/github/Brunomm/br_nfe/badges/coverage.svg)](https://codeclimate.com/github/Brunomm/br_nfe/coverage) [![Gem Version](https://badge.fury.io/rb/br_nfe.svg)](http://badge.fury.io/rb/br_nfe) [![Code Climate](https://codeclimate.com/github/Brunomm/br_nfe/badges/gpa.svg)](https://codeclimate.com/github/Brunomm/br_nfe)
5
2
 
6
3
  # **BrNfe**
7
4
  Gem para emissão de notas fiscais eletrônicas.
8
5
 
9
- **Motivo e Objetivo**
6
+ **Motivação**
10
7
 
11
- Devido a falta de padronização dos parâmetros e a forma de envio e resposta na transmissão de Notas Fiscais de Serviços (NFS), esta gem vem com o objetivo de obter uma forma padronizada dessa tarefa, e assim, facilitando a vida de muitos desenvolvedores.
8
+ Devido a falta de padronização dos parâmetros e a forma de envio e resposta na transmissão de Notas Fiscais de Serviços (NFS-e), esta gem vem com o objetivo de obter uma forma padronizada dessa tarefa, e assim, facilitando a vida de muitos desenvolvedores.
12
9
 
13
10
  **O que essa gem faz?**
14
11
 
@@ -26,24 +23,186 @@ Devido a falta de padronização dos parâmetros e a forma de envio e resposta n
26
23
 
27
24
  gem 'br_nfe'
28
25
 
29
- ## NFS-e desenvolvidas
26
+ #**Introdução**
27
+ Com o objetivo de padronizar os valores, foi criado algumas classes auxiliares para montar e organizar os dados para a emissão das notas fiscais, dentre eles estão:
30
28
 
31
- * Betha Sistemas V 1.0
32
- * Betha Sistemas V 2.02
29
+ > - `BrNfe::Endereco`
30
+ > -- Tem o objetivo de padronizar os dados de endereço para o emitente e destinatário.
33
31
 
34
- ####**1 - Começando**
35
- Foi criado várias classes para auxiliar na montagem dos dados para emissão da NF, dentre eles estão:
32
+ > ####**Específico para NFS-e**:
33
+ > - `BrNfe::Service::Emitente`
34
+ > -- Classe para instanciar o emitente da nota fiscal de **serviço (NFS-e)**.
35
+ > -- Contém as validações e regras para o mesmo.
36
+ > -- Contém uma "Associação" com `BrNfe::Endereco`
36
37
 
38
+ > - `BrNfe::Service::Destinatario`
39
+ > -- Classe para instanciar o destinatário da nota fiscal de **serviço (NFS-e)**.
40
+ > -- Contém as validações e regras para o mesmo.
41
+ > -- Contém uma "Associação" com `BrNfe::Endereco`
42
+ >
43
+ > - `BrNfe::Service::Intermediario`
44
+ > -- Classe para instanciar o intermediário na nota fiscal de **serviço (NFS-e)**.
45
+ > -- Contém as validações e regras para o mesmo.
46
+ >
47
+ > - `BrNfe::Service::Item`
48
+ > -- Item da nota fiscal de serviço;
49
+ > -- Alguns órgãos emissores permitem adicionar vários itens de serviço na NFS.
50
+ > -- Ainda, para alguns emissores é obrigatório a definição de itens de serviço, porém para outros esse item não é necessário.
51
+ >
52
+ > - `BrNfe::Service::Rps`
53
+ > -- Classe para instanciar o RPS (Recibo Provisório de Serviço).
54
+ > -- Contém as validações e regras para o mesmo.
55
+ > -- Contém "Associação" com `BrNfe::Service::Destinatario` e `BrNfe::Service::Intermediario`
56
+ > -- Contém vários `BrNfe::Service::Item` através do atributo `items`
57
+
58
+ Como citado anteriormente, essas são classes para objetos **auxiliares**, e serão utilizados para manter uma melhor organização da gem.
59
+
60
+ ##**Entendendo a organização da gem**
61
+
62
+ Primeiramente é necessário ter conhecimento das **_operações_** disponíveis para cada tipo de Nota Fiscal. Vamos a elas:
63
+ ### Notas Fiscais de Serviço (NFS)
64
+ Existe uma certa "padronização" das operações desenvolvidas pelos Órgãos Emissores¹. São elas:
65
+
66
+ - **Cancelamento de NFS** _(Utilizado para cancelar uma NFS)_
67
+ - **Consulta do Lote RPS** _(Utilizado para consultar um lote de RPS)_
68
+ - **Consulta de NFS por RPS** _(Utilizado para consultar uma NFS através dos dados do RPS)_
69
+ - **Consulta NFS** _(Utilizado para consultar uma ou várias NFS através do número e/ou data)_
70
+ - **Consulta Situação do lote RPS** _(Utilizado para consultar a situação de um lote de RPS para verificar se foi processado e se foi processado com sucesso ou erro)_
71
+ - **Recepção do lote RPS** _(Utilizado enviar RPS's para emissão de NFS)_
72
+
73
+ Através destas operações, serão instanciados os objetos para realizar as funcionalidades para cada atividade.
74
+
75
+ Cada cidade contrata um órgão emissor para o processamento das notas (ou pode ser que a própria prefeitura desenvolva), então para realizar as operações para cada cidade, você deverá saber qual a empresa contratada para esse fim, e então instanciar o objeto de acordo com sua necessidade.
76
+ A seguir segue o padrão para instanciar os objetos para cada operação:
77
+
78
+ - Para Cancelamento de NFS:
79
+ ```ruby
80
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::CancelaNfse.new(...)
81
+ ```
82
+ - Para Consulta do Lote RPS:
83
+ ```ruby
84
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaLoteRps.new(...)
85
+ ```
86
+ - Para Consulta de NFS por RPS:
87
+ ```ruby
88
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaNfsPorRps.new(...)
89
+ ```
90
+ - Para Consulta NFS:
91
+ ```ruby
92
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaNfse.new(...)
93
+ ```
94
+ - Para Consulta Situação do lote RPS:
95
+ ```ruby
96
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaSituacaoLoteRps.new(...)
97
+ ```
98
+ - Para Recepção do lote RPS:
99
+ ```ruby
100
+ BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::RecepcaoLoteRps.new(...)
101
+ ```
102
+
103
+ Para enviar os dados para processamento deve ser chamado o método **`request`**, no qual será enviado os dados via XML para o órgão emissor correspondente.
104
+
105
+ Se desejar, antes de enviar os dados, o objeto poderá ser validado, EX:
106
+ ```ruby
107
+ @ws = BrNfe::Service::ORGAO_EMISSOR::V1::ConsultaLoteRps.new(...)
108
+ if @ws.valid?
109
+ @ws.request
110
+ @response = @ws.response
111
+ else
112
+ # Tratamento da validação
113
+ end
114
+ ```
115
+
116
+ O resultado obtido na variável `@response` é um objeto com os dados pertinentes e derivados de cada operação, por exemplo, se eu utilizar a operação de `RecepcaoLoteRps`, então a resposta será um objeto da classe `BrNfe::Service::Response::RecepcaoLoteRps`, na qual tem as informações obtidas pela resposta dessa operação. Já para a operação `ConsultaLoteRps` a resposta é um objeto da classe `BrNfe::Service::Response::ConsultaLoteRps`, e assim segue para cada operação. (para ver exemplos das respostas obtidas a cada operação, consulte a wiki).
117
+
118
+ Se desejar, é possível obter a resposta original ([do savon](http://savonrb.com/version2/response.html)) de cada órgão emissor através do método `original_response`.
119
+
120
+
121
+
122
+ ###**Instanciando e manipulando objetos**
123
+
124
+ Em todas as classes desenvolvidas é possível instanciar objetos em forma de `Hash` ou `Block`. Veja:
125
+ ```ruby
126
+ # Hash
127
+ @endereco = BrNfe::Endereco.new({
128
+ logradouro: "RUA FERNANDO MACHADO",
129
+ numero: 369,
130
+ complemento: "E",
131
+ # ...
132
+ })
133
+
134
+ # Block
135
+ @endereco = BrNfe::Endereco.new do |endereco|
136
+ endereco.logradouro = "RUA FERNANDO MACHADO"
137
+ endereco.numero = 369
138
+ endereco.complemento = "E"
139
+ # ...
140
+ })
141
+ ```
142
+
143
+ As associações também podem ser instanciadas em forma de `Hash` ou `Block`, e ainda pode ser setado o objeto diretamente. Exemplo:
144
+ ```ruby
145
+ # Hash
146
+ @emitente = BrNfe::Service::Emitente.new({
147
+ cnpj: '11.111.111/1111-00',
148
+ ...
149
+ endereco: {
150
+ logradouro: "RUA FERNANDO MACHADO",
151
+ numero: 369,
152
+ complemento: "E",
153
+ ...
154
+ }
155
+ })
156
+ # Block
157
+ @emitente = BrNfe::Service::Emitente.new do |emitente|
158
+ emitente.cnpj = '11.111.111/1111-00'
159
+ ...
160
+ emitente.endereco do |address|
161
+ address.logradouro = "RUA FERNANDO ...",
162
+ address.numero = 369,
163
+ address.complemento = "E",
164
+ ...
165
+ end
166
+ # OU
167
+ # emitente.endereco = {
168
+ # logradouro: "RUA FERNANDO ...",
169
+ # numero: 369,
170
+ # complemento: "E",
171
+ # ...
172
+ # }
173
+ end
174
+
175
+ # Setando o objeto
176
+ @endereco = BrNfe::Endereco.new(rua: "RUA DOS PRAZERES",...)
177
+ @emitente = BrNfe::Service::Emitente.new(razao_social: 'Emitente LTDA', endereco: @endereco)
178
+
179
+ ```
180
+
181
+ Também é possível fazer o `merge` dos atributos através do método `assign_attributes`, por exemplo:
37
182
  ```ruby
38
- BrNfe::Endereco
39
- BrNfe::Emitente
40
- BrNfe::Destinatario
41
- BrNfe::CondicaoPagamento
42
- BrNfe::Service::Intermediario
43
- BrNfe::Service::Rps
183
+ @endereco = BrNfe::Endereco.new({
184
+ logradouro: "RUA 1",
185
+ numero: 100,
186
+ uf: 'SC'
187
+ })
188
+ @endereco.logradouro
189
+ # => "RUA 1"
190
+ @endereco.numero
191
+ # => 100
192
+ @endereco.uf
193
+ # => "SC"
194
+
195
+ @endereco.assign_attributes(numero: 200, uf: 'RS')
196
+ @endereco.logradouro
197
+ # => "RUA 1"
198
+ @endereco.numero
199
+ # => 200
200
+ @endereco.uf
201
+ # => "RS"
44
202
  ```
45
203
 
46
- A seguir um exemplo de cada objeto com valores:
204
+ ### **Exemplo para Recepção de um Lote RPS:**
205
+
47
206
 
48
207
  **Endereço:**
49
208
  ```ruby
@@ -63,7 +222,7 @@ A seguir um exemplo de cada objeto com valores:
63
222
  ***
64
223
  **Emitente:**
65
224
  ```ruby
66
- @emitente = BrNfe::Emitente.new({
225
+ @emitente = BrNfe::Service::Emitente.new({
67
226
  cnpj: '11.111.111/1111-00',
68
227
  inscricao_municipal: '66165-4',
69
228
  razao_social: 'RAZÃO SOCIAL',
@@ -78,42 +237,17 @@ A seguir um exemplo de cada objeto com valores:
78
237
  })
79
238
  ```
80
239
 
81
- Perceba que para definir o endereço do emitente, foi setado diretamente o objeto `@endereco`, porém, também é possível setar o objeto endereço em forma de `block` ou `hash` (isso vale para todas as classes), por exemplo:
82
- ```ruby
83
- # Hash
84
- @emitente = BrNfe::Emitente.new({
85
- cnpj: '11.111.111/1111-00',
86
- ...
87
- endereco: {
88
- logradouro: "RUA FERNANDO MACHADO",
89
- numero: 369,
90
- complemento: "E",
91
- ...
92
- }
93
- })
94
- # Block
95
- @emitente = BrNfe::Emitente.new do |emitente|
96
- emitente.cnpj = '11.111.111/1111-00'
97
- ...
98
- emitente.endereco do |endereco|
99
- endereco.logradouro = "RUA FERNANDO ...",
100
- endereco.numero = 369,
101
- endereco.complemento = "E",
102
- ...
103
- end
104
- end
105
- ```
106
240
 
107
241
  Lembrando que por padrão, sempre que for chamar `@emitente.endereco` irá retornar um objeto da class `BrNfe::Endereco`, mesmo que não seja setado valor algum, ex:
108
242
  ```ruby
109
- @emitente = BrNfe::Emitente.new
243
+ @emitente = BrNfe::Service::Emitente.new
110
244
  @emitente.endereco
111
245
  # => #<BrNfe::Endereco:0x000000022669a0 @codigo_pais="1058", ....>
112
246
  ```
113
247
  ***
114
248
  **Destinatário**
115
249
  ```ruby
116
- @destinatario = BrNfe::Destinatario.new({
250
+ @destinatario = BrNfe::Service::Destinatario.new({
117
251
  cpf_cnpj: "111.111.111-00",
118
252
  inscricao_municipal: "",
119
253
  inscricao_estadual: "",
@@ -123,7 +257,14 @@ Lembrando que por padrão, sempre que for chamar `@emitente.endereco` irá retor
123
257
  telefone: "3365478",
124
258
  email: "destinatario@mail.com",
125
259
  endereco: {
126
- ...
260
+ logradouro: "RUA AUGUSTO VILA LOBO",
261
+ numero: 45,
262
+ complemento: "E",
263
+ bairro: "CENTRO",
264
+ nome_municipio: "FLORIANÓPOLIS",
265
+ codigo_municipio: '4205407',
266
+ uf: "SC",
267
+ cep: "89665-000",
127
268
  }
128
269
  })
129
270
  ```
@@ -151,12 +292,9 @@ end
151
292
  **RPS**
152
293
  ```ruby
153
294
  @rps = BrNfe::Service::Rps.new do |rps|
154
- rps.destinatario = { ... } # Attributos da class BrNfe::Destinatario
155
- rps.intermediario do |intermediario|
156
- .... # Dados da class BrNfe::Service::Intermediario
157
- end
158
- rps.condicao_pagamento = BrNfe::CondicaoPagamento.new(...)
159
-
295
+ rps.destinatario = @destinatario
296
+ rps.intermediario = @intermediario
297
+ rps.condicao_pagamento = @condicao_pagamento
160
298
  rps.numero = 5525
161
299
  rps.serie = "SN"
162
300
  rps.tipo = "1"
@@ -166,79 +304,89 @@ end
166
304
  rps.numero_substituicao = "5524"
167
305
  rps.serie_substituicao = "SN"
168
306
  rps.tipo_substituicao = "1"
169
- rps.codigo_obra = ""
170
- rps.codigo_art = ""
171
307
  rps.valor_servicos = 100.00
172
308
  rps.valor_deducoes = "0"
173
309
  rps.valor_pis = "0"
174
- rps.valor_cofins = ""
175
- rps.valor_inss = ""
176
- rps.valor_ir = ""
177
- rps.valor_csll = ""
178
- rps.outras_retencoes = ""
179
- rps.iss_retido = ""
180
310
  rps.valor_iss = 2.0
181
311
  rps.aliquota = 0.02 # = 2%
182
312
  rps.base_calculo = "100.00"
183
- rps.desconto_incondicionado = ""
184
- rps.desconto_condicionado = ""
185
- rps.responsavel_retencao = ""
186
313
  rps.item_lista_servico = "1.07"
187
314
  rps.discriminacao = "1 Configuração de servidor: R$ 500.00"
188
315
  rps.exigibilidade_iss = "1"
189
316
  rps.codigo_municipio = "4204202"
190
317
  rps.municipio_incidencia = "4204202"
191
- rps.codigo_pais = ""
192
- rps.numero_processo = ""
193
- rps.codigo_cnae = ""
194
- rps.outras_informacoes = ""
195
- rps.codigo_tributacao_municipio = ""
196
318
  end
197
319
  ```
198
- ####**2 - Exemplos**
199
- Para todos os Web Services, após instanciados, poderá ser chamado o método `request`, no qual será enviado os dados via XML para o órgão emissor correspondente.
200
-
201
- Se desejar, antes de enviar os dados, o objeto poderá ser validado, EX:
320
+ ***
321
+ **RecepcaoLoteRps** (Com o órgão emissor Betha)
202
322
  ```ruby
203
- @ws = BrNfe::Service::Betha::V1::ConsultaLoteRps.new(...)
204
- if @ws.valid?
205
- @ws.request
206
- @response = @ws.response
323
+ @recepcao = BrNfe::Service::Betha::V1::RecepcaoLoteRps.new do |ws|
324
+ ws.emitente = @emitente
325
+ ws.lote_rps = [@rps]
326
+ ws.numero_lote_rps = 214
327
+ ws.env = :production # OU :test
328
+ ws.certificate_pkcs12_path = '/path/to/certificate.pfx'
329
+ wx.certificate_pkcs12_password = 'PASSWORD'
207
330
  end
331
+
332
+ @recepcao.request
333
+ resp = @recepcao.response
334
+ #=> #<BrNfe::Service::Response::RecepcaoLoteRps:0x000016a9e28 ...>
335
+
336
+ resp.protocolo
337
+ #=> 'EX456156E'
338
+
339
+ resp.data_recebimento
340
+ #=> Fri, 23 Sep 2015 17:40:15 -0300
341
+
342
+ resp.numero_lote
343
+ #=> 214
344
+
208
345
  ```
209
- O resultado obtido na variável `@response` é um objeto da class `BrNfe::Service::Response::Default`, no qual será retornada em todas as requisições. Essa classe é responsável de manter o padrão das mensagens de resposta para todos os webservices. Se desejar, poderá obter a resposta original (no formato Hash) de cada órgão emissor através do método `original_response`.
210
- Para saber quais os valores obtidos pelo `BrNfe::Service::Response::Default`, veja: [Resposta padrão](exemplos/resposta_padrao.markdown)
211
346
 
212
- Lista de exemplos:
347
+ Para demais operações consulte a WiKi.
213
348
 
214
- * [Betha Sistemas v1.0](exemplos/betha_v1.markdown)
215
- * [Betha Sistemas v2.02](exemplos/betha_v2.markdown)
349
+ ### Configurações
350
+ É possível customizar as classes auxiliares, por exemplo, se você quiser fazer alguma validação específica para o endereço, que contenha os mesmo atributos, você deve criar sua própria `class` e setar na configuração da gem qual será a classe que irá representar o endereço. Exemplo:
351
+ ```ruby
352
+ class MeuEndereco < BrNfe::Endereco
353
+ validates :cep, length: { is: 8 }
354
+ end
216
355
 
217
- ####**3 - Configurações**
356
+ emitente = BrNfe::Service::Emitente.new
357
+ emitente.endereco
358
+ #=> #<BrNfe::Endereco:0x000000016741d8 @codigo_pais="1058", @nome_pais="BRASIL">
359
+
360
+ BrNfe.endereco_class = MeuEndereco
361
+
362
+ emitente = BrNfe::Service::Emitente.new
363
+ emitente.endereco
364
+ #=> #<MeuEndereco:0x000000016741d8 @codigo_pais="1058", @nome_pais="BRASIL">
365
+ ```
366
+
367
+ Segue as configurações possíveis
218
368
  ```ruby
219
369
  BrNfe.setup do |config|
220
- # É possível customizar as classes auxiliares, por exemlo,
221
- # se você quiser fazer alguma validação específica para o endereço,
222
- # que contenha os mesmo atributos, e setar na configuração da gem
223
- # qual será a classe que irá representar o endereco.
224
- # config.endereco_class = ClasseCustomizadaEndereco
225
-
370
+ # Classe que representa o endereço
226
371
  config.endereco_class = BrNfe::Endereco
227
- config.emitente_class = BrNfe::Emitente
228
- config.destinatario_class = BrNfe::Destinatario
229
- config.intermediario_class = BrNfe::Service::Intermediario
372
+
373
+ # Classe que representa os emitentes para NFS
374
+ config.emitente_service_class = BrNfe::Service::Emitente
375
+
376
+ # Classe que representa o destinatário para NFS
377
+ config.destinatario_service_class = BrNfe::Service::Destinatario
378
+
379
+ # Classe que representa o intermediário da NFS
380
+ config.intermediario_service_class = BrNfe::Service::Intermediario
381
+
382
+ # Classe que representa a condição de pagamento da NFS
230
383
  config.condicao_pagamento_class = BrNfe::CondicaoPagamento
231
- config.rps_class BrNfe::Service::Rps
232
384
 
233
- # Se você utiliza certificado SSL, faça as seguintes modificações na configuração:
234
- # config.client_wsdl_ssl_verify_mode = :peer
235
- # config.client_wsdl_ssl_cert_file = 'caminho/client_cert.pem'
236
- # config.client_wsdl_ssl_cert_key_file = 'caminho/client_key.pem'
237
- # config.client_wsdl_ssl_cert_key_password = 'senha'
238
- config.client_wsdl_ssl_verify_mode = :none
239
- config.client_wsdl_ssl_cert_file = nil
240
- config.client_wsdl_ssl_cert_key_file = nil
241
- config.client_wsdl_ssl_cert_key_password = nil
385
+ # Classe que representa o RPS da NFS
386
+ config.rps_class = BrNfe::Service::Rps
387
+
388
+ # Classe que representa o item de uma NFS
389
+ config.service_item_class = BrNfe::Service::Item
242
390
 
243
391
  # Se você quiser exibir em log a requisição SOAP, mude para true as opções a seguir
244
392
  config.client_wsdl_log = false
@@ -248,19 +396,29 @@ end
248
396
 
249
397
 
250
398
  ## Objetivos futuros
251
- * Emitir notas fiscais de produtos.
399
+ * Emitir notas fiscais de produtos (em andamento).
252
400
  * Emitir notas fiscais de serviços para todas as cidades do Brasil.
401
+ * Emitir DANFE.
402
+ * Leitura de notas fiscais de produto e serviço
253
403
 
254
404
  ## Contribuições
255
405
 
256
- Seja um contribuidor. Você pode contribuir de N formas. Seguem elas:
406
+ Seja um contribuidor. Você pode contribuir de várias formas:
257
407
 
258
408
  * Desenvolver emissão de NFS-e para outras cidades.
259
409
  * Desenvolver emissão de NF-e (produtos).
260
410
  * Refatorando código.
261
411
  * Fornecendo Feedback construtivo (Sempre bem vindo!).
262
412
 
413
+
263
414
  ## Licença
264
415
 
265
- - BSD
266
- - Copyleft 2015 Bruno M. Mergen
416
+ - MIT
417
+ - Copyleft 2016 Bruno Mucelini Mergen
418
+
419
+ ----------
420
+
421
+ > ¹ **Órgão Emissor: ** É a empresa contratada pela prefeitura com a finalidade de processar as notas fiscais. Exemplo: (Betha, Simpliss, Thema)
422
+
423
+ ----------
424
+
@@ -1,5 +1,5 @@
1
1
  module BrNfe
2
- module Helper
2
+ module Association
3
3
  module HaveAddress
4
4
 
5
5
  def validar_endereco
@@ -1,5 +1,5 @@
1
1
  module BrNfe
2
- module Helper
2
+ module Association
3
3
  module HaveCondicaoPagamento
4
4
  def condicao_pagamento
5
5
  yield(condicao_pagamento || new_condicao_pagamento) if block_given?
@@ -0,0 +1,22 @@
1
+ module BrNfe
2
+ module Association
3
+ module HaveDestinatario
4
+ def destinatario
5
+ yield(destinatario) if block_given?
6
+ @destinatario.is_a?(destinatario_class) ? @destinatario : @destinatario = destinatario_class.new()
7
+ end
8
+
9
+ def destinatario=(value)
10
+ if value.is_a?(destinatario_class) || value.nil?
11
+ @destinatario = value
12
+ elsif value.is_a?(Hash)
13
+ destinatario.assign_attributes(value)
14
+ end
15
+ end
16
+ private
17
+ def destinatario_class
18
+ raise "O método #destinatario_class deve ser implementado na class #{self.class}"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module BrNfe
2
+ module Association
3
+ module HaveEmitente
4
+
5
+ def emitente
6
+ yield emitente if block_given?
7
+ @emitente.is_a?(emitente_class) ? @emitente : @emitente = emitente_class.new()
8
+ end
9
+
10
+
11
+ def emitente=(value)
12
+ if value.is_a?(emitente_class) || value.nil?
13
+ @emitente = value
14
+ elsif value.is_a?(Hash)
15
+ emitente.assign_attributes(value)
16
+ end
17
+ end
18
+ private
19
+ def emitente_class
20
+ raise "O método #emitente_class deve ser implementado na classe #{self.class}"
21
+ end
22
+ end
23
+ end
24
+ end
data/lib/br_nfe/base.rb CHANGED
@@ -1,16 +1,23 @@
1
1
  module BrNfe
2
2
  class Base < BrNfe::ActiveModelBase
3
- include BrNfe::Helper::HaveEmitente
3
+ include BrNfe::Association::HaveEmitente
4
4
 
5
5
  attr_accessor :certificate_pkcs12_password
6
6
  attr_accessor :certificate_pkcs12_path
7
7
  attr_accessor :certificate_pkcs12_value
8
8
  attr_accessor :env
9
9
 
10
- attr_accessor :client_wsdl_ssl_verify_mode
11
- attr_accessor :client_wsdl_ssl_cert_file
12
- attr_accessor :client_wsdl_ssl_cert_key_file
13
- attr_accessor :client_wsdl_ssl_cert_key_password
10
+ # Código IBGE da cidade emitente
11
+ attr_accessor :ibge_code_of_issuer_city
12
+ def ibge_code_of_issuer_city
13
+ "#{@ibge_code_of_issuer_city ||= emitente.endereco.codigo_municipio}"
14
+ end
15
+
16
+ # Código IBGE do estado emitente
17
+ attr_accessor :ibge_code_of_issuer_uf
18
+ def ibge_code_of_issuer_uf
19
+ "#{@ibge_code_of_issuer_uf ||= emitente.endereco.codigo_ibge_uf}"
20
+ end
14
21
 
15
22
  validate :validar_emitente
16
23
  validates :certificate, :certificate_key, presence: true, if: :certificado_obrigatorio?
@@ -20,6 +27,10 @@ module BrNfe
20
27
  false
21
28
  end
22
29
 
30
+ def ssl_request?
31
+ false
32
+ end
33
+
23
34
  def env
24
35
  @env ||= :production
25
36
  end
@@ -147,30 +158,29 @@ module BrNfe
147
158
  :v1
148
159
  end
149
160
 
150
- def client_wsdl
151
- @client_wsdl ||= Savon.client({
152
- wsdl: wsdl,
153
- log: BrNfe.client_wsdl_log,
154
- pretty_print_xml: BrNfe.client_wsdl_pretty_print_xml,
155
-
156
- ssl_verify_mode: client_wsdl_ssl_verify_mode,
157
- ssl_cert_file: client_wsdl_ssl_cert_file,
158
- ssl_cert_key_file: client_wsdl_ssl_cert_key_file,
159
- ssl_cert_key_password: client_wsdl_ssl_cert_key_password
160
- })
161
+ # Versão da requisição SSL caso o servidor necessite de autenticação SSL
162
+ # Valores possíveis: [:TLSv1_2, :TLSv1_1, :TLSv1, :SSLv3, :SSLv23]
163
+ # Default: :SSLv3
164
+ def ssl_version
165
+ :SSLv3
161
166
  end
162
167
 
163
- def client_wsdl_ssl_verify_mode
164
- @client_wsdl_ssl_verify_mode ||= BrNfe.client_wsdl_ssl_verify_mode
165
- end
166
- def client_wsdl_ssl_cert_file
167
- @client_wsdl_ssl_cert_file ||= BrNfe.client_wsdl_ssl_cert_file
168
- end
169
- def client_wsdl_ssl_cert_key_file
170
- @client_wsdl_ssl_cert_key_file ||= BrNfe.client_wsdl_ssl_cert_key_file
171
- end
172
- def client_wsdl_ssl_cert_key_password
173
- @client_wsdl_ssl_cert_key_password ||= BrNfe.client_wsdl_ssl_cert_key_password
168
+ # Cliente WSDL utilizado para fazer a requisição.
169
+ # Utilizando a gem savon.
170
+ # Veja mais detalhes em http://savonrb.com/version2/client.html
171
+ def client_wsdl
172
+ @client_wsdl ||= Savon.client do |global|
173
+ global.wsdl wsdl
174
+ global.log BrNfe.client_wsdl_log
175
+ global.pretty_print_xml BrNfe.client_wsdl_pretty_print_xml
176
+ global.ssl_verify_mode :none
177
+ if ssl_request?
178
+ global.ssl_version ssl_version
179
+ global.ssl_cert certificate
180
+ global.ssl_cert_key certificate_key
181
+ global.ssl_cert_key_password certificate_pkcs12_password
182
+ end
183
+ end
174
184
  end
175
185
 
176
186
  # Caso não tenha o certificate_pkcs12 salvo em arquivo, pode setar a string do certificate_pkcs12 direto pelo atributo certificate_pkcs12_value
@@ -1,3 +1,5 @@
1
+ # Esta classe não está sendo utilizada para envio de NFS
2
+ # Será usada no futuro
1
3
  module BrNfe
2
4
  class CondicaoPagamento < BrNfe::ActiveModelBase
3
5