br_nfe 2.1.0 → 2.1.1

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 +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