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
@@ -1,463 +0,0 @@
1
- #encoding UTF-8
2
- module BrNfe
3
- module Response
4
- module Service
5
- class BuildResponse < BrNfe::ActiveModelBase
6
- # 1: A resposta da requisição soap
7
- attr_accessor :savon_response
8
-
9
- # 2: Um array com o caminho inicial padrão da requisição de retorno
10
- attr_accessor :keys_root_path
11
-
12
- # 3: Caminho para encontrar o XML da NF-e
13
- attr_accessor :nfe_xml_path
14
-
15
- # 4: Alguns Webservices trazem dentro do body da resposta SOAp
16
- # outro XML com as informações necessárias.
17
- # Quando isso aocntece é preciso converter esse XML para um HASH
18
- # para que possamos encontrar os valores necessários.
19
- attr_accessor :body_xml_path
20
-
21
- # 5: Codificação original do XML de resposta para que seja convertido
22
- # para UTF-8
23
- attr_accessor :xml_encode
24
-
25
- ##############################################################################################################
26
- ####################### CAMINHOS PARA ENCONTRAR OS VALORES NA RESPOSTA DA REQUISIÇÃO #####################
27
- # Caminho para encontrar
28
- attr_accessor :lot_number_path # o numero do lote
29
- attr_accessor :protocol_path # o protocolo
30
- attr_accessor :received_date_path # a data de recebimento do xml
31
- attr_accessor :situation_path # a situação do lote rps
32
- attr_accessor :situation_key_values #
33
- def situation_key_values
34
- @situation_key_values.is_a?(Hash) ? @situation_key_values : {
35
- '1' => :unreceived, # Não Recebido
36
- '2' => :unprocessed,# Não Processado
37
- '3' => :error, # Processado com Erro
38
- '4' => :success, # Processado com Sucesso
39
- }
40
- end
41
- attr_accessor :cancelation_date_time_path # data e hora do cancelamento da nf
42
- attr_accessor :message_errors_path # local para encontrar as mensagens de erro
43
- attr_accessor :message_code_key # chave que representa o codigo do erro
44
- attr_accessor :message_msg_key # chave que representa a mensagem do erro
45
- attr_accessor :message_solution_key # chave que representa a solução do erro
46
- attr_accessor :invoices_path # o caminho para listar as notas fiscais
47
- attr_accessor :invoice_numero_nf_path # numero da nota fiscal
48
- attr_accessor :invoice_codigo_verificacao_path # código de verificação
49
- attr_accessor :invoice_data_emissao_path # Data de emissão da NF
50
- attr_accessor :invoice_url_nf_path # URL para visualizar a DANFE (apenas alguns emissores disponibilizam isso)
51
- attr_accessor :invoice_rps_numero_path # Número do RPS da nota
52
- attr_accessor :invoice_rps_serie_path # Número da série do RPS da nota
53
- attr_accessor :invoice_rps_tipo_path # Tipo do RPS
54
- attr_accessor :invoice_rps_situacao_path # Situação da NF
55
- attr_accessor :invoice_rps_substituido_numero_path # Número do RPS da nota substituido
56
- attr_accessor :invoice_rps_substituido_serie_path # Número da série do RPS da nota substituido
57
- attr_accessor :invoice_rps_substituido_tipo_path # Tipo do RPS substituido
58
- attr_accessor :invoice_data_emissao_rps_path # Data de emissão do RPS
59
- attr_accessor :invoice_competencia_path # Competência da nf
60
- attr_accessor :invoice_natureza_operacao_path # natureza de operação
61
- attr_accessor :invoice_regime_especial_tributacao_path # Regime especial de tributação
62
- attr_accessor :invoice_optante_simples_nacional_path # Se é optante do simples
63
- attr_accessor :invoice_incentivador_cultural_path # Incentivo cultural
64
- attr_accessor :invoice_outras_informacoes_path # Outras informações da nf
65
- attr_accessor :invoice_item_lista_servico_path # Código do serviço prestado
66
- attr_accessor :invoice_cnae_code_path # CNAE utilizado na nf
67
- attr_accessor :invoice_description_path # Descrição da nf
68
- attr_accessor :invoice_codigo_municipio_path # Código do municipio prestador do serviço
69
- attr_accessor :invoice_total_services_path # Valor total dos serviços
70
- attr_accessor :invoice_deductions_path # Valor das deduções
71
- attr_accessor :invoice_valor_pis_path # Valor do PIS
72
- attr_accessor :invoice_valor_cofins_path # Valor do COFINS
73
- attr_accessor :invoice_valor_inss_path # Valor do INSS
74
- attr_accessor :invoice_valor_ir_path # Valor do IR
75
- attr_accessor :invoice_valor_csll_path # Valor da CSLL
76
- attr_accessor :invoice_iss_retained_path # Se o ISS está retido
77
- attr_accessor :invoice_outras_retencoes_path # Valor Outras retenções
78
- attr_accessor :invoice_total_iss_path # Valor total de ISS
79
- attr_accessor :invoice_base_calculation_path # Valor da base de cálculo
80
- attr_accessor :invoice_iss_tax_rate_path # Percentual do imposto de ISS
81
- attr_accessor :invoice_valor_liquido_path # Valor liquido da NFS
82
- attr_accessor :invoice_desconto_condicionado_path # Valor do desconto condicionado
83
- attr_accessor :invoice_desconto_incondicionado_path # Valor do desconto incondicionado
84
- attr_accessor :invoice_responsavel_retencao_path # Responsável pela retenção
85
- attr_accessor :invoice_numero_processo_path # Número do processo da NF
86
- attr_accessor :invoice_municipio_incidencia_path # Código do municipio em que o serviço foi prestado
87
- attr_accessor :invoice_orgao_gerador_municipio_path # Órgão gerador municipal da NFS
88
- attr_accessor :invoice_orgao_gerador_uf_path # Órgão gerador estadual da NFS
89
- attr_accessor :invoice_cancelamento_codigo_path # Código do cancelamento da NFS
90
- attr_accessor :invoice_cancelamento_numero_nf_path # Número da NFS cancelada
91
- attr_accessor :invoice_cancelamento_cnpj_path # CNPJ da NF cancelada
92
- attr_accessor :invoice_cancelamento_municipio_path # Municipo da nota cancelada
93
- attr_accessor :invoice_cancelamento_data_hora_path # Data e hora do cancelamento
94
- attr_accessor :invoice_cancelamento_inscricao_municipal_path # Inscrição municipal da nota cancelada
95
- attr_accessor :invoice_nfe_substituidora_path # Número da NFS substituidora
96
- attr_accessor :invoice_codigo_obra_path # Código obra
97
- attr_accessor :invoice_codigo_art_path # Código art
98
- attr_accessor :invoice_emitente_cnpj_path # Cnpj do emitente da NFS
99
- attr_accessor :invoice_emitente_inscricao_municipal_path # Inscricao municipal do emitente da NFS
100
- attr_accessor :invoice_emitente_razao_social_path # Razao social do emitente da NFS
101
- attr_accessor :invoice_emitente_nome_fantasia_path # Nome fantasia do emitente da NFS
102
- attr_accessor :invoice_emitente_telefone_path # Telefone do emitente da NFS
103
- attr_accessor :invoice_emitente_email_path # Email do emitente da NFS
104
- attr_accessor :invoice_emitente_endereco_logradouro_path # Logradouro do emitente da NFS
105
- attr_accessor :invoice_emitente_endereco_numero_path # Numero do emitente da NFS
106
- attr_accessor :invoice_emitente_endereco_complemento_path # Complemento do emitente da NFS
107
- attr_accessor :invoice_emitente_endereco_bairro_path # Bairro do emitente da NFS
108
- attr_accessor :invoice_emitente_endereco_codigo_municipio_path # Codigo_municipio do emitente da NFS
109
- attr_accessor :invoice_emitente_endereco_uf_path # Uf do emitente da NFS
110
- attr_accessor :invoice_emitente_endereco_cep_path # Cep do emitente da NFS
111
- attr_accessor :invoice_destinatario_cpf_path # Cpf do destinatário da NFS
112
- attr_accessor :invoice_destinatario_cnpj_path # Cnpj do destinatário da NFS
113
- attr_accessor :invoice_destinatario_inscricao_municipal_path # Inscricao municipal do destinatário da NFS
114
- attr_accessor :invoice_destinatario_inscricao_estadual_path # Inscricao estadual do destinatário da NFS
115
- attr_accessor :invoice_destinatario_inscricao_suframa_path # Inscricao suframa do destinatário da NFS
116
- attr_accessor :invoice_destinatario_razao_social_path # Razao social do destinatário da NFS
117
- attr_accessor :invoice_destinatario_telefone_path # Telefone do destinatário da NFS
118
- attr_accessor :invoice_destinatario_email_path # Email do destinatário da NFS
119
- attr_accessor :invoice_destinatario_endereco_logradouro_path # Logradouro do destinatário da NFS
120
- attr_accessor :invoice_destinatario_endereco_numero_path # Numero do destinatário da NFS
121
- attr_accessor :invoice_destinatario_endereco_complemento_path # Complemento do destinatário da NFS
122
- attr_accessor :invoice_destinatario_endereco_bairro_path # Bairro do destinatário da NFS
123
- attr_accessor :invoice_destinatario_endereco_codigo_municipio_path # Codigo_municipio do destinatário da NFS
124
- attr_accessor :invoice_destinatario_endereco_uf_path # Uf do destinatário da NFS
125
- attr_accessor :invoice_destinatario_endereco_cep_path # Cep do destinatário da NFS
126
-
127
- ####################### FIM DA DEFINIÇÃO DOS CAMINHOS ############################
128
- ######################################################################################
129
-
130
- def response
131
- @response ||= BrNfe::Response::Service::Default.new({
132
- error_messages: get_message_for_path(message_errors_path),
133
- notas_fiscais: get_invoices,
134
- protocolo: get_protocol,
135
- data_recebimento: get_received_date,
136
- numero_lote: get_lot_number,
137
- situation: get_situation,
138
- original_xml: savon_response.xml.force_encoding('UTF-8'),
139
- cancelation_date_time: get_cancelation_date_time
140
- })
141
- end
142
-
143
- # Retorna o valor encontrado no body da resposta Savon
144
- # em formato de hash
145
- #
146
- # <b>Tipo de retorno: </b> _Hash_
147
- #
148
- def savon_body
149
- return @savon_body if @savon_body.present?
150
- if body_xml_path.present?
151
- @savon_body = Nori.new.parse(
152
- body_converted_to_xml
153
- ).deep_transform_keys!{|k| k.to_s.underscore.to_sym}
154
- else
155
- @savon_body = savon_response.try(:body) || {}
156
- end
157
- end
158
-
159
- # Converte o body da requisição em XML (String)
160
- # Isso é necessário quando dentro do body vem a resposta com outro XML
161
- #
162
- # <b>Tipo de retorno: </b> _String_
163
- #
164
- def body_converted_to_xml
165
- @body_converted_to_xml ||= canonicalize("#{find_value_for_keys(savon_response.try(:body), body_xml_path)}".encode(xml_encode).force_encoding('UTF-8'))
166
- end
167
-
168
- # Método utilizado para encontrar valores em um Hash
169
- # passando o caminho do valor em um array onde contém as chaves
170
- # ordenadas.
171
- # Recebe 2 parêmntros:
172
- # 1º um o hash onde contém o valor a ser encontrado
173
- # 2º um array com as chaves em sequencia formando o caminho para encontrar o valor.
174
- #
175
- # A funcionalidade desse método funciona parecido com o `.dig` da classe Hash do
176
- # Ruby 2.3.0.
177
- # A diferença é que no caso de exmeplo a seguir não apresenta uma excessão par ao usuário
178
- # hash = {v1: {v2: 'valor string'}}
179
- # hash.dig(:v1, :v2, :v3) <- Dá erro
180
- # find_value_for_keys(hash, [:v1, :v2, :v3] <- Retorna nil e não da erro
181
- #
182
- # <b>Tipo de retorno: </b> _Anything_
183
- #
184
- def find_value_for_keys(hash, keys)
185
- return if keys.blank?
186
- keys = [keys] unless keys.is_a?(Array)
187
-
188
- result = hash
189
- keys.each do |key|
190
- if result.is_a?(Hash)
191
- result = result[key]
192
- else
193
- result = nil
194
- break
195
- end
196
- end
197
- result
198
- end
199
-
200
- # Quando para encontrar o valor de uma determinada chave
201
- # é necessaŕio percorer o hash de retorno dês do inicio do mesmo.
202
- # Como a mensagem tem uma chave 'root' padrão e pode ser diferente
203
- # para cada orgaao emissor, é setado uma valor na variavel keys_root_path
204
- # para que não seja necessário ficar setando a mesma chave em todos os
205
- # métodos utilizados para encontrar determinado valor
206
- #
207
- # <b>Tipo de retorno: </b> _Array_
208
- #
209
- def path_with_root(path)
210
- return if path.blank?
211
- keys_root_path + [path].flatten
212
- end
213
-
214
- # Método que retorna as mensagens de retorno da requisição
215
- # Quando procurar a mensagem a mesma pode retornar em 3 formatos:
216
- # Hash: Onde encontrou apenas 1 mensagem com Codigo, Mensagem e Solução
217
- # Array: Onde encontrou mais de uma mensagem com Codigo, Mensagem e Solução
218
- # String: Onde encontrou uma unica mensagem de texto
219
- #
220
- # <b>Tipo de retorno: </b> _Array_
221
- #
222
- def get_message_for_path(msg_path)
223
- messages = []
224
- _messages = find_value_for_keys(savon_body, path_with_root(msg_path) )
225
- if _messages.is_a?(Hash)
226
- messages << get_message_for_hash(_messages)
227
- elsif _messages.is_a?(Array)
228
- _messages.map{|msg| messages << get_message_for_hash(msg) if msg.present? }
229
- elsif _messages.present?
230
- messages << _messages
231
- end
232
- messages.uniq
233
- end
234
-
235
- # Método utilizado para quando encontrar uam mensagem que seja um HAsh,
236
- # onde nesse caso a mensagem terá um codigo de erro, uma mensagem, e uma
237
- # mensagem de solução
238
- #
239
- # <b>Tipo de retorno: </b> _hash_
240
- #
241
- def get_message_for_hash(msg_hash)
242
- {
243
- code: find_value_for_keys(msg_hash, message_code_key),
244
- message: find_value_for_keys(msg_hash, message_msg_key),
245
- solution: find_value_for_keys(msg_hash, message_solution_key)
246
- }
247
- end
248
-
249
- # Método que retorna as notas fiscais emitidas.
250
- # Como pode ser que retorne mais de uma NF, a busca pela NF
251
- # pode retornar um Array ou um Hash.
252
- # Se retornar um array é porque existe mais de uma NFE, então é necessario
253
- # percorer com um loop e instanciar cada nota com seus valores.
254
- # Se retornar um Hash é porque tem apenas uma NFe, e nesse caso
255
- # irá instanciar apenas a nfe encontrada.
256
- #
257
- # <b>Tipo de retorno: </b> _Array_
258
- #
259
- def get_invoices
260
- invoices = []
261
- _invoices = find_value_for_keys(savon_body, path_with_root(invoices_path))
262
- if _invoices.is_a?(Hash)
263
- invoices << instance_invoice(_invoices)
264
- elsif _invoices.is_a?(Array)
265
- _invoices.map{|inv| invoices << instance_invoice(inv) }
266
- end
267
- invoices
268
- end
269
-
270
- # Método utilizado para pegar protocolo de solicitação de
271
- # processamento do RPS.
272
- # Esse protocolo é utilizado posteriormente para consultar se
273
- # o RPS já foi processado
274
- #
275
- # <b>Tipo de retorno: </b> _String_
276
- #
277
- def get_protocol
278
- find_value_for_keys(savon_body, path_with_root(protocol_path))
279
- end
280
-
281
- # Método utilizado para pegar a situação do RPS
282
- #
283
- # <b>Tipo de retorno: </b> _Symbol_
284
- #
285
- def get_situation
286
- situation_value = find_value_for_keys(savon_body, path_with_root(situation_path))
287
- situation_value = situation_key_values[situation_value.to_s.strip] if situation_value.present?
288
- situation_value
289
- end
290
-
291
- # Método utilizado para pegar a data de recebimento do lote
292
- #
293
- # <b>Tipo de retorno: </b> _String_
294
- #
295
- def get_received_date
296
- find_value_for_keys(savon_body, path_with_root(received_date_path))
297
- end
298
-
299
- # Método utilizado para pegar o número do lote RPS
300
- #
301
- # <b>Tipo de retorno: </b> _String_
302
- #
303
- def get_lot_number
304
- find_value_for_keys(savon_body, path_with_root(lot_number_path))
305
- end
306
-
307
- # Método utilizado para pegar o XML da NF
308
- # É necessário canonicalizar o document para que seja colocado os
309
- # namespaces nas tags corretas. Caso contrário o XML não irá abrir.
310
- #
311
- # <b>Tipo de retorno: </b> _String_
312
- #
313
- def get_xml_nf
314
- if body_xml_path.present?
315
- canonicalize(Nokogiri::XML.parse( body_converted_to_xml , nil, 'UTF-8').xpath(nfe_xml_path).to_xml)
316
- else
317
- canonicalize(Nokogiri::XML.parse(canonicalize(savon_response.doc.to_s), nil, 'UTF-8').xpath(nfe_xml_path).to_xml)
318
- end
319
- rescue
320
- savon_response.xml
321
- end
322
-
323
- # Método utilizado para pegar o valor da data e hora de cancelmaento
324
- # Só é utilizado para cancelar a NF-e
325
- #
326
- # <b>Tipo de retorno: </b> _DateTime_ OU _Nil_ OU _String_
327
- #
328
- def get_cancelation_date_time
329
- find_value_for_keys(savon_body, path_with_root(cancelation_date_time_path)) if cancelation_date_time_path.present?
330
- end
331
-
332
- # Método responsável por instanciar a nota fiscal de acordo com o hash
333
- # passado por parêmetro
334
- # O parâmetro recebido deve ser o Hash representado pelo tipo de dados tcCompNfse(do manual NFS-e v1)
335
- #
336
- def instance_invoice(invoice_hash)
337
- nfe = BrNfe::Response::Service::NotaFiscal.new({
338
- xml_nf: get_xml_nf.force_encoding('UTF-8'),
339
- numero_nf: find_value_for_keys(invoice_hash, invoice_numero_nf_path ),
340
- codigo_verificacao: find_value_for_keys(invoice_hash, invoice_codigo_verificacao_path ),
341
- data_emissao: find_value_for_keys(invoice_hash, invoice_data_emissao_path ),
342
- url_nf: find_value_for_keys(invoice_hash, invoice_url_nf_path ),
343
- competencia: find_value_for_keys(invoice_hash, invoice_competencia_path ),
344
- natureza_operacao: find_value_for_keys(invoice_hash, invoice_natureza_operacao_path ),
345
- regime_especial_tributacao: find_value_for_keys(invoice_hash, invoice_regime_especial_tributacao_path ),
346
- optante_simples_nacional: find_value_for_keys(invoice_hash, invoice_optante_simples_nacional_path ),
347
- incentivador_cultural: find_value_for_keys(invoice_hash, invoice_incentivador_cultural_path ),
348
- outras_informacoes: find_value_for_keys(invoice_hash, invoice_outras_informacoes_path ),
349
- item_lista_servico: find_value_for_keys(invoice_hash, invoice_item_lista_servico_path ),
350
- cnae_code: find_value_for_keys(invoice_hash, invoice_cnae_code_path ),
351
- description: find_value_for_keys(invoice_hash, invoice_description_path ),
352
- codigo_municipio: find_value_for_keys(invoice_hash, invoice_codigo_municipio_path ),
353
- responsavel_retencao: find_value_for_keys(invoice_hash, invoice_responsavel_retencao_path ),
354
- numero_processo: find_value_for_keys(invoice_hash, invoice_numero_processo_path ),
355
- municipio_incidencia: find_value_for_keys(invoice_hash, invoice_municipio_incidencia_path ),
356
- orgao_gerador_municipio: find_value_for_keys(invoice_hash, invoice_orgao_gerador_municipio_path ),
357
- orgao_gerador_uf: find_value_for_keys(invoice_hash, invoice_orgao_gerador_uf_path ),
358
- codigo_obra: find_value_for_keys(invoice_hash, invoice_codigo_obra_path ),
359
- codigo_art: find_value_for_keys(invoice_hash, invoice_codigo_art_path ),
360
- })
361
-
362
- build_rps_fields_nfe(nfe, invoice_hash)
363
- build_cancelation_fields_nfe(nfe, invoice_hash)
364
- build_values_nfe(nfe, invoice_hash)
365
- build_emitente_nfe(nfe, invoice_hash)
366
- build_destinatario_nfe(nfe, invoice_hash)
367
- nfe
368
- end
369
-
370
- def build_rps_fields_nfe(nfe, invoice_hash)
371
- nfe.assign_attributes({
372
- rps_numero: find_value_for_keys(invoice_hash, invoice_rps_numero_path ),
373
- rps_serie: find_value_for_keys(invoice_hash, invoice_rps_serie_path ),
374
- rps_tipo: find_value_for_keys(invoice_hash, invoice_rps_tipo_path ),
375
- rps_situacao: find_value_for_keys(invoice_hash, invoice_rps_situacao_path ),
376
- rps_substituido_numero: find_value_for_keys(invoice_hash, invoice_rps_substituido_numero_path ),
377
- rps_substituido_serie: find_value_for_keys(invoice_hash, invoice_rps_substituido_serie_path ),
378
- rps_substituido_tipo: find_value_for_keys(invoice_hash, invoice_rps_substituido_tipo_path ),
379
- data_emissao_rps: find_value_for_keys(invoice_hash, invoice_data_emissao_rps_path ),
380
- })
381
- end
382
-
383
- def build_cancelation_fields_nfe(nfe, invoice_hash)
384
- nfe.assign_attributes({
385
- cancelamento_codigo: find_value_for_keys(invoice_hash, invoice_cancelamento_codigo_path ),
386
- cancelamento_numero_nf: find_value_for_keys(invoice_hash, invoice_cancelamento_numero_nf_path ),
387
- cancelamento_cnpj: find_value_for_keys(invoice_hash, invoice_cancelamento_cnpj_path ),
388
- cancelamento_inscricao_municipal: find_value_for_keys(invoice_hash, invoice_cancelamento_inscricao_municipal_path),
389
- cancelamento_municipio: find_value_for_keys(invoice_hash, invoice_cancelamento_municipio_path ),
390
- cancelamento_data_hora: find_value_for_keys(invoice_hash, invoice_cancelamento_data_hora_path ),
391
- nfe_substituidora: find_value_for_keys(invoice_hash, invoice_nfe_substituidora_path ),
392
- })
393
- end
394
-
395
- def build_values_nfe(nfe, invoice_hash)
396
- nfe.assign_attributes({
397
- total_services: find_value_for_keys(invoice_hash, invoice_total_services_path ),
398
- deductions: find_value_for_keys(invoice_hash, invoice_deductions_path ),
399
- valor_pis: find_value_for_keys(invoice_hash, invoice_valor_pis_path ),
400
- valor_cofins: find_value_for_keys(invoice_hash, invoice_valor_cofins_path ),
401
- valor_inss: find_value_for_keys(invoice_hash, invoice_valor_inss_path ),
402
- valor_ir: find_value_for_keys(invoice_hash, invoice_valor_ir_path ),
403
- valor_csll: find_value_for_keys(invoice_hash, invoice_valor_csll_path ),
404
- iss_retained: find_value_for_keys(invoice_hash, invoice_iss_retained_path ),
405
- outras_retencoes: find_value_for_keys(invoice_hash, invoice_outras_retencoes_path ),
406
- total_iss: find_value_for_keys(invoice_hash, invoice_total_iss_path ),
407
- base_calculation: find_value_for_keys(invoice_hash, invoice_base_calculation_path ),
408
- iss_tax_rate: find_value_for_keys(invoice_hash, invoice_iss_tax_rate_path ),
409
- valor_liquido: find_value_for_keys(invoice_hash, invoice_valor_liquido_path ),
410
- desconto_condicionado: find_value_for_keys(invoice_hash, invoice_desconto_condicionado_path ),
411
- desconto_incondicionado: find_value_for_keys(invoice_hash, invoice_desconto_incondicionado_path ),
412
- })
413
- end
414
-
415
- def build_emitente_nfe(nfe, invoice_hash)
416
- nfe.assign_attributes({
417
- emitente: {
418
- cnpj: find_value_for_keys(invoice_hash, invoice_emitente_cnpj_path ),
419
- inscricao_municipal: find_value_for_keys(invoice_hash, invoice_emitente_inscricao_municipal_path ),
420
- razao_social: find_value_for_keys(invoice_hash, invoice_emitente_razao_social_path ),
421
- nome_fantasia: find_value_for_keys(invoice_hash, invoice_emitente_nome_fantasia_path ),
422
- telefone: find_value_for_keys(invoice_hash, invoice_emitente_telefone_path ),
423
- email: find_value_for_keys(invoice_hash, invoice_emitente_email_path ),
424
- endereco: {
425
- logradouro: find_value_for_keys(invoice_hash, invoice_emitente_endereco_logradouro_path ),
426
- numero: find_value_for_keys(invoice_hash, invoice_emitente_endereco_numero_path ),
427
- complemento: find_value_for_keys(invoice_hash, invoice_emitente_endereco_complemento_path ),
428
- bairro: find_value_for_keys(invoice_hash, invoice_emitente_endereco_bairro_path ),
429
- codigo_municipio: find_value_for_keys(invoice_hash, invoice_emitente_endereco_codigo_municipio_path ),
430
- uf: find_value_for_keys(invoice_hash, invoice_emitente_endereco_uf_path ),
431
- cep: find_value_for_keys(invoice_hash, invoice_emitente_endereco_cep_path ),
432
- }
433
- }
434
- })
435
- end
436
-
437
- def build_destinatario_nfe(nfe, invoice_hash)
438
- nfe.assign_attributes({
439
- destinatario: {
440
- cpf_cnpj: (find_value_for_keys(invoice_hash, invoice_destinatario_cpf_path) || find_value_for_keys(invoice_hash, invoice_destinatario_cnpj_path)),
441
- inscricao_municipal: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_municipal_path),
442
- inscricao_estadual: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_estadual_path),
443
- inscricao_suframa: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_suframa_path),
444
- razao_social: find_value_for_keys(invoice_hash, invoice_destinatario_razao_social_path),
445
- telefone: find_value_for_keys(invoice_hash, invoice_destinatario_telefone_path),
446
- email: find_value_for_keys(invoice_hash, invoice_destinatario_email_path),
447
- endereco: {
448
- logradouro: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_logradouro_path),
449
- numero: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_numero_path),
450
- complemento: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_complemento_path),
451
- bairro: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_bairro_path),
452
- codigo_municipio: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_codigo_municipio_path),
453
- uf: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_uf_path),
454
- cep: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_cep_path),
455
- }
456
- }
457
- })
458
- end
459
-
460
- end
461
- end
462
- end
463
- end
@@ -1,185 +0,0 @@
1
- module BrNfe
2
- module Response
3
- module Service
4
- class Default < BrNfe::ActiveModelBase
5
-
6
- # Array contendo as mensagens de erros
7
- # No array pode conter Hash (com :codigo, :mensagem e :correcao)
8
- # mas também pode conter mensagens de texto puro
9
- #
10
- # <b>Tipo de retorno: </b> _Array_
11
- #
12
- attr_accessor :error_messages
13
-
14
- # Array contendo as notas fiscais encontradas no xml de retorno.
15
- # Utillizado em algumas requisições onde pode ser que retorne algum XML de NFe
16
- # É um Array contendo objetos da classe BrNfe::Response::Service::NotaFiscal
17
- #
18
- # <b>Tipo de retorno: </b> _Array_
19
- #
20
- attr_accessor :notas_fiscais
21
-
22
- # Número do protocolo de recebimento do XML
23
- # Setado normalmente quando é enviado um lote RPS
24
- # para processamento.
25
- # O valor desse atributo é utilizado para posteriormente
26
- # fazer a consulta para saber se o RPS já foi processado
27
- #
28
- # <b>Tipo de retorno: </b> _Integer_ ou _String_
29
- #
30
- attr_accessor :protocolo
31
-
32
- # Data/Data hora do recebimento do XML pelo orgão emissor
33
- # Nesse atrubuto pe setado a data/hora na qual o orgão emissor
34
- # recebeu o XML que foi enviado.
35
- # também é nesse atributo que é setado a data/hora do processamento
36
- # da NF-e (nos casos de consulta)
37
- #
38
- # <b>Tipo de retorno: </b> _DateTime_
39
- #
40
- attr_accessor :data_recebimento
41
-
42
- # Número do lote RPS
43
- # Nesse atributo é setado o número do lote RPS
44
- # quando o mesmo for retornado na resposta
45
- #
46
- # <b>Tipo de retorno: </b> _Integer_
47
- #
48
- attr_accessor :numero_lote
49
-
50
- # XML original da resposta
51
- # Contém todo o XML Envelope da resposta SOAP
52
- #
53
- # <b>Tipo de retorno: </b> _String_ XML
54
- #
55
- attr_accessor :original_xml
56
-
57
- # Data e hora do cancelamento da NF-e
58
- # utilizado apenas para o Cancelamento da NF
59
- #
60
- # <b>Tipo de retorno: </b> _DateTime_
61
- #
62
- attr_accessor :cancelation_date_time
63
-
64
- # Status possíveis
65
- # [:success, :falied, :soap_error, :http_error, :unknown_error]
66
- #
67
- # <b>Tipo de retorno: </b> _Hash_
68
- #
69
- attr_accessor :status
70
-
71
- # Código da situação do lote RPS
72
- # Utilizado para saber se o Lote RPS já foi processado
73
- # e se foi processado com sucesso ou teve algum erro
74
- #
75
- # <b>Tipo de retorno: </b> _Integer_ ou _String_
76
- #
77
- attr_accessor :situation
78
- def situation
79
- @situation ||= get_situation_by_message_codes if error_messages.present?
80
- @situation
81
- end
82
-
83
- def situation_unreceived_code_errors
84
- @situation_unreceived_code_errors ||= []
85
- @situation_unreceived_code_errors+['E4']
86
- end
87
- def situation_unreceived_code_errors=(value)
88
- @situation_unreceived_code_errors = [value].flatten
89
- end
90
-
91
- def situation_unprocessed_code_errors
92
- @situation_unprocessed_code_errors ||= []
93
- @situation_unprocessed_code_errors+['E92']
94
- end
95
- def situation_unprocessed_code_errors=(value)
96
- @situation_unprocessed_code_errors = [value].flatten
97
- end
98
-
99
- def situation_success_code_errors
100
- @situation_success_code_errors ||= []
101
- @situation_success_code_errors#+[]
102
- end
103
- def situation_success_code_errors=(value)
104
- @situation_success_code_errors = [value].flatten
105
- end
106
-
107
- # Como alguns orgãos emissores (como a Betha) não tem a capacidade
108
- # de programar para colocar o codigo da situação em determinados momentos
109
- # e simplesmente colocam uma mensagem de erro na resposta sem setar a situação
110
- # foi necessário construir esse método para que a partir dos códigos das mensagens
111
- # seja possível distinguir qual a situação atual do lote enviado.
112
- # Por exemplo: Quando retornar o erro com código 'E92' quer dizer que a situação
113
- # do lote é :unprocessed. Equivalente ao código de situação 2
114
- #
115
- # <b>Tipo de retorno: </b> _Symbol_
116
- #
117
- def get_situation_by_message_codes
118
- if (situation_unprocessed_code_errors & message_codes).any?
119
- :unprocessed
120
- elsif (situation_unreceived_code_errors & message_codes).any?
121
- :unreceived
122
- elsif (situation_success_code_errors & message_codes).any?
123
- :success
124
- elsif message_codes.any?
125
- :error
126
- end
127
- end
128
-
129
- def initialize(attributes = {})
130
- self.notas_fiscais = [] # Para poder utilizar o <<
131
- self.error_messages = [] # Para poder utilizar o <<
132
- super
133
- end
134
-
135
- def notas_fiscais
136
- @notas_fiscais = [@notas_fiscais].flatten # Para retornar sempre um vetor
137
- end
138
-
139
- def error_messages
140
- @error_messages = [@error_messages].flatten
141
- end
142
-
143
- # Método para saber se a conexão com a prefeitura foi mal-sucedida.
144
- # Caso ocorra algum erro na requisição irá retornar true.
145
- #
146
- # <b>Tipo de retorno: </b> _Boolean_
147
- #
148
- def unsuccessful_request?
149
- status.in?([:soap_error, :http_error, :unknown_error])
150
- end
151
-
152
- # Método para saber se a conexão com a prefeitura foi bem-sucedida.
153
- # Caso a requisição ocorra certo e não apresente nenhuma exception
154
- # irá retornar true.
155
- #
156
- # <b>Tipo de retorno: </b> _Boolean_
157
- #
158
- def successful_request?
159
- !unsuccessful_request?
160
- end
161
-
162
- def success?
163
- status == :success
164
- end
165
-
166
- def status
167
- @status ||= get_status
168
- end
169
-
170
- def get_status
171
- error_messages.blank? ? :success : :falied
172
- end
173
-
174
- # Retorna um array apenas com os códigos das mensagens de erro.
175
- # Sempre retornar o código no formato de String.
176
- #
177
- # <b>Tipo de retorno: </b> _Array_
178
- #
179
- def message_codes
180
- @message_codes ||= error_messages.select{|msg| msg.is_a?(Hash)}.map{|msg| msg[:code].try(:to_s) }
181
- end
182
- end
183
- end
184
- end
185
- end