br_nfe 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +12 -2
  5. data/README.markdown +3 -1
  6. data/Rakefile +20 -1
  7. data/lib/br_nfe/active_model/associations.rb +11 -0
  8. data/lib/br_nfe/active_model/has_many.rb +65 -0
  9. data/lib/br_nfe/active_model/has_one.rb +57 -0
  10. data/lib/br_nfe/active_model_base.rb +38 -1
  11. data/lib/br_nfe/base.rb +9 -0
  12. data/lib/br_nfe/calculos/fatores_de_multiplicacao.rb +67 -0
  13. data/lib/br_nfe/calculos/modulo11.rb +54 -0
  14. data/lib/br_nfe/calculos/modulo11_fator_de2a9.rb +83 -0
  15. data/lib/br_nfe/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
  16. data/lib/br_nfe/constants.rb +46 -1
  17. data/lib/br_nfe/endereco.rb +6 -2
  18. data/lib/br_nfe/helper/cpf_cnpj.rb +8 -1
  19. data/lib/br_nfe/person.rb +32 -3
  20. data/lib/br_nfe/product/destinatario.rb +45 -0
  21. data/lib/br_nfe/product/emitente.rb +14 -1
  22. data/lib/br_nfe/product/evento/base.rb +146 -0
  23. data/lib/br_nfe/product/evento/cancelamento.rb +46 -0
  24. data/lib/br_nfe/product/gateway/base.rb +16 -43
  25. data/lib/br_nfe/product/gateway/web_service_am.rb +140 -0
  26. data/lib/br_nfe/product/gateway/web_service_ba.rb +140 -0
  27. data/lib/br_nfe/product/gateway/web_service_ce.rb +162 -0
  28. data/lib/br_nfe/product/gateway/web_service_go.rb +140 -0
  29. data/lib/br_nfe/product/gateway/web_service_mg.rb +140 -0
  30. data/lib/br_nfe/product/gateway/web_service_ms.rb +140 -0
  31. data/lib/br_nfe/product/gateway/web_service_mt.rb +140 -0
  32. data/lib/br_nfe/product/gateway/web_service_pe.rb +140 -0
  33. data/lib/br_nfe/product/gateway/web_service_pr.rb +140 -0
  34. data/lib/br_nfe/product/gateway/web_service_rs.rb +140 -0
  35. data/lib/br_nfe/product/gateway/web_service_sp.rb +140 -0
  36. data/lib/br_nfe/product/gateway/web_service_svan.rb +162 -0
  37. data/lib/br_nfe/product/gateway/web_service_svc_an.rb +131 -0
  38. data/lib/br_nfe/product/gateway/web_service_svc_rs.rb +20 -0
  39. data/lib/br_nfe/product/gateway/web_service_svrs.rb +111 -10
  40. data/lib/br_nfe/product/nf_xml_value.rb +278 -0
  41. data/lib/br_nfe/product/nfe/adicao_importacao.rb +76 -0
  42. data/lib/br_nfe/product/nfe/cobranca/duplicata.rb +44 -0
  43. data/lib/br_nfe/product/nfe/cobranca/fatura.rb +64 -0
  44. data/lib/br_nfe/product/nfe/cobranca/pagamento.rb +99 -0
  45. data/lib/br_nfe/product/nfe/declaracao_importacao.rb +221 -0
  46. data/lib/br_nfe/product/nfe/detalhe_exportacao.rb +89 -0
  47. data/lib/br_nfe/product/nfe/item.rb +678 -0
  48. data/lib/br_nfe/product/nfe/item_tax/cofins.rb +138 -0
  49. data/lib/br_nfe/product/nfe/item_tax/cofins_st.rb +68 -0
  50. data/lib/br_nfe/product/nfe/item_tax/icms.rb +593 -0
  51. data/lib/br_nfe/product/nfe/item_tax/icms_uf_destino.rb +169 -0
  52. data/lib/br_nfe/product/nfe/item_tax/importacao.rb +62 -0
  53. data/lib/br_nfe/product/nfe/item_tax/ipi.rb +179 -0
  54. data/lib/br_nfe/product/nfe/item_tax/issqn.rb +256 -0
  55. data/lib/br_nfe/product/nfe/item_tax/pis.rb +138 -0
  56. data/lib/br_nfe/product/nfe/item_tax/pis_st.rb +68 -0
  57. data/lib/br_nfe/product/nfe/processo_referencia.rb +48 -0
  58. data/lib/br_nfe/product/nfe/transporte/base.rb +264 -0
  59. data/lib/br_nfe/product/nfe/transporte/transportador.rb +15 -0
  60. data/lib/br_nfe/product/nfe/transporte/veiculo.rb +53 -0
  61. data/lib/br_nfe/product/nfe/transporte/volume.rb +89 -0
  62. data/lib/br_nfe/product/nota_fiscal.rb +1173 -0
  63. data/lib/br_nfe/product/operation/base.rb +255 -0
  64. data/lib/br_nfe/product/operation/nfe_autorizacao.rb +118 -0
  65. data/lib/br_nfe/product/operation/nfe_consulta_protocolo.rb +61 -0
  66. data/lib/br_nfe/product/operation/nfe_download_nf.rb +86 -0
  67. data/lib/br_nfe/product/operation/nfe_inutilizacao.rb +168 -0
  68. data/lib/br_nfe/product/operation/nfe_recepcao_evento.rb +70 -0
  69. data/lib/br_nfe/product/operation/nfe_ret_autorizacao.rb +63 -0
  70. data/lib/br_nfe/product/operation/nfe_status_servico.rb +46 -0
  71. data/lib/br_nfe/product/response/base.rb +97 -0
  72. data/lib/br_nfe/product/response/build/base.rb +287 -0
  73. data/lib/br_nfe/product/response/build/nfe_autorizacao.rb +102 -0
  74. data/lib/br_nfe/product/response/build/nfe_consulta_protocolo.rb +133 -0
  75. data/lib/br_nfe/product/response/build/nfe_inutilizacao.rb +53 -0
  76. data/lib/br_nfe/product/response/build/nfe_ret_autorizacao.rb +65 -0
  77. data/lib/br_nfe/product/response/build/nfe_status_servico.rb +43 -0
  78. data/lib/br_nfe/product/response/event.rb +89 -0
  79. data/lib/br_nfe/product/response/nfe_autorizacao.rb +12 -0
  80. data/lib/br_nfe/product/response/nfe_consulta_protocolo.rb +13 -0
  81. data/lib/br_nfe/product/response/nfe_inutilizacao.rb +89 -0
  82. data/lib/br_nfe/product/response/nfe_ret_autorizacao.rb +9 -0
  83. data/lib/br_nfe/product/response/nfe_status_servico.rb +31 -0
  84. data/lib/br_nfe/product/xml/_signed_info_sh1.xml.slim +9 -0
  85. data/lib/br_nfe/product/xml/_tc_cpf_cnpj.xml.slim +7 -0
  86. data/lib/br_nfe/product/xml/signature_sh1.xml.slim +12 -0
  87. data/lib/br_nfe/product/xml/v1_00/evento/infEventoCancelamento.xml.slim +19 -0
  88. data/lib/br_nfe/product/xml/v1_00/root/NfeDownloadNf.xml.slim +5 -0
  89. data/lib/br_nfe/product/xml/v1_00/root/NfeRecepcaoEvento.xml.slim +7 -0
  90. data/lib/br_nfe/product/xml/v2_00/_tc_endereco.xml.slim +19 -0
  91. data/lib/br_nfe/product/xml/v2_00/_tc_infNFe.xml.slim +39 -0
  92. data/lib/br_nfe/product/xml/v2_00/infInut.xml.slim +12 -0
  93. data/lib/br_nfe/product/xml/v2_00/infNFe/NFe.xml.slim +4 -0
  94. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_cobr.xml.slim +19 -0
  95. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_dest.xml.slim +14 -0
  96. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_det.xml.slim +7 -0
  97. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_emit.xml.slim +19 -0
  98. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_entrega.xml.slim +11 -0
  99. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_exporta.xml.slim +2 -0
  100. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_ide.xml.slim +24 -0
  101. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_infAdic.xml.slim +13 -0
  102. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_retirada.xml.slim +11 -0
  103. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_total.xml.slim +50 -0
  104. data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_transp.xml.slim +35 -0
  105. data/lib/br_nfe/product/xml/v2_00/infNFe/det/_tc_imposto.xml.slim +31 -0
  106. data/lib/br_nfe/product/xml/v2_00/infNFe/det/_tc_prod.xml.slim +37 -0
  107. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS00.xml.slim +6 -0
  108. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS10.xml.slim +16 -0
  109. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS101.xml.slim +4 -0
  110. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS102.xml.slim +3 -0
  111. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS20.xml.slim +6 -0
  112. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS201.xml.slim +15 -0
  113. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS202.xml.slim +14 -0
  114. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS30.xml.slim +12 -0
  115. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS40.xml.slim +7 -0
  116. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS500.xml.slim +6 -0
  117. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS51.xml.slim +13 -0
  118. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS60.xml.slim +5 -0
  119. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS70.xml.slim +18 -0
  120. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS90.xml.slim +21 -0
  121. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS900.xml.slim +25 -0
  122. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_COFINS.xml.slim +26 -0
  123. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_COFINS_ST.xml.slim +7 -0
  124. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_ICMS.xml.slim +45 -0
  125. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_II.xml.slim +4 -0
  126. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_IPI.xml.slim +30 -0
  127. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_PIS.xml.slim +26 -0
  128. data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_PIS_ST.xml.slim +7 -0
  129. data/lib/br_nfe/product/xml/v2_00/infNFe/det/prod/_tc_di.xml.slim +13 -0
  130. data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_retTransp.xml.slim +6 -0
  131. data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_transporta.xml.slim +17 -0
  132. data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_vol.xml.slim +15 -0
  133. data/lib/br_nfe/product/xml/v2_00/infNFe.xml.slim +3 -0
  134. data/lib/br_nfe/product/xml/v2_00/root/NfeAutorizacao.xml.slim +5 -0
  135. data/lib/br_nfe/product/xml/v2_00/root/NfeInutilizacao.xml.slim +4 -0
  136. data/lib/br_nfe/product/xml/v2_00/root/NfeRetAutorizacao.xml.slim +3 -0
  137. data/lib/br_nfe/product/xml/v2_00/root/NfeStatusServico.xml.slim +4 -0
  138. data/lib/br_nfe/product/xml/v2_01/root/NfeConsultaProtocolo.xml.slim +4 -0
  139. data/lib/br_nfe/product/xml/v3_10/_tc_infNFe.xml.slim +44 -0
  140. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_dest.xml.slim +25 -0
  141. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_det.xml.slim +14 -0
  142. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_exporta.xml.slim +4 -0
  143. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_ide.xml.slim +26 -0
  144. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_pag.xml.slim +7 -0
  145. data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_total.xml.slim +78 -0
  146. data/lib/br_nfe/product/xml/v3_10/infNFe/det/_tc_imposto.xml.slim +37 -0
  147. data/lib/br_nfe/product/xml/v3_10/infNFe/det/_tc_prod.xml.slim +48 -0
  148. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS20.xml.slim +12 -0
  149. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS30.xml.slim +17 -0
  150. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS40.xml.slim +7 -0
  151. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS51.xml.slim +19 -0
  152. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS70.xml.slim +23 -0
  153. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS90.xml.slim +26 -0
  154. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/_tc_ICMSUFDest.xml.slim +8 -0
  155. data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/_tc_ISSQN.xml.slim +35 -0
  156. data/lib/br_nfe/product/xml/v3_10/infNFe/det/prod/_tc_det_export.xml.slim +8 -0
  157. data/lib/br_nfe/product/xml/v3_10/infNFe/det/prod/_tc_di.xml.slim +28 -0
  158. data/lib/br_nfe/product/xml/v3_10/root/NfeAutorizacao.xml.slim +6 -0
  159. data/lib/br_nfe/service/base.rb +1 -105
  160. data/lib/br_nfe/service/betha/v1/cancela_nfse.rb +1 -1
  161. data/lib/br_nfe/service/response/default.rb +1 -1
  162. data/lib/br_nfe/service/simpliss/v1/base.rb +2 -0
  163. data/lib/br_nfe/version.rb +2 -2
  164. data/lib/br_nfe.rb +180 -22
  165. data/lib/config/locales/br_nfe/en/product/nfe/cobranca/fatura.yml +6 -0
  166. data/lib/config/locales/br_nfe/en/product/nfe/declaracao_importacao.yml +10 -0
  167. data/lib/config/locales/br_nfe/en/product/nfe/item.yml +20 -0
  168. data/lib/config/locales/br_nfe/en/product/nfe/item_tax/icms_uf_destino.yml +8 -0
  169. data/lib/config/locales/br_nfe/en/product/nfe/transporte/base.yml +9 -0
  170. data/lib/config/locales/br_nfe/en/product/nota_fiscal.yml +21 -0
  171. data/lib/config/locales/br_nfe/en/product/operation/nfe_autorizacao.yml +10 -0
  172. data/lib/config/locales/br_nfe/en/product/operation/nfe_recepcao_evento.yml +6 -0
  173. data/lib/config/locales/br_nfe/pt-BR/product/nfe/cobranca/fatura.yml +6 -0
  174. data/lib/config/locales/br_nfe/pt-BR/product/nfe/declaracao_importacao.yml +10 -0
  175. data/lib/config/locales/br_nfe/pt-BR/product/nfe/item.yml +20 -0
  176. data/lib/config/locales/br_nfe/pt-BR/product/nfe/item_tax/icms_uf_destino.yml +8 -0
  177. data/lib/config/locales/br_nfe/pt-BR/product/nfe/transporte/base.yml +9 -0
  178. data/lib/config/locales/br_nfe/pt-BR/product/nota_fiscal.yml +21 -0
  179. data/lib/config/locales/br_nfe/pt-BR/product/operation/nfe_autorizacao.yml +10 -0
  180. data/lib/config/locales/br_nfe/pt-BR/product/operation/nfe_recepcao_evento.yml +6 -0
  181. data/test/br_nfe/association/have_destinatario_test.rb +8 -8
  182. data/test/br_nfe/association/have_emitente_test.rb +6 -6
  183. data/test/br_nfe/base_test.rb +15 -4
  184. data/test/br_nfe/endereco_test.rb +15 -0
  185. data/test/br_nfe/person_test.rb +55 -6
  186. data/test/br_nfe/product/destinatario_test.rb +26 -0
  187. data/test/br_nfe/product/emitente_test.rb +1 -2
  188. data/test/br_nfe/product/evento/base_test.rb +58 -0
  189. data/test/br_nfe/product/evento/cancelamento_test.rb +32 -0
  190. data/test/br_nfe/product/gateway/web_service_am_test.rb +242 -0
  191. data/test/br_nfe/product/gateway/web_service_ba_test.rb +242 -0
  192. data/test/br_nfe/product/gateway/web_service_ce_test.rb +242 -0
  193. data/test/br_nfe/product/gateway/web_service_go_test.rb +242 -0
  194. data/test/br_nfe/product/gateway/web_service_mg_test.rb +242 -0
  195. data/test/br_nfe/product/gateway/web_service_ms_test.rb +242 -0
  196. data/test/br_nfe/product/gateway/web_service_mt_test.rb +408 -0
  197. data/test/br_nfe/product/gateway/web_service_pe_test.rb +408 -0
  198. data/test/br_nfe/product/gateway/web_service_pr_test.rb +408 -0
  199. data/test/br_nfe/product/gateway/web_service_rs_test.rb +407 -0
  200. data/test/br_nfe/product/gateway/web_service_sp_test.rb +408 -0
  201. data/test/br_nfe/product/gateway/web_service_svan_test.rb +242 -0
  202. data/test/br_nfe/product/gateway/web_service_svc_an_test.rb +185 -0
  203. data/test/br_nfe/product/gateway/web_service_svc_rs_test.rb +185 -0
  204. data/test/br_nfe/product/gateway/web_service_svrs_test.rb +208 -2
  205. data/test/br_nfe/product/nfe/adicao_importacao_test.rb +19 -0
  206. data/test/br_nfe/product/nfe/cobranca/duplicata_test.rb +19 -0
  207. data/test/br_nfe/product/nfe/cobranca/fatura_test.rb +32 -0
  208. data/test/br_nfe/product/nfe/cobranca/pagamento_test.rb +105 -0
  209. data/test/br_nfe/product/nfe/declaracao_importacao_test.rb +116 -0
  210. data/test/br_nfe/product/nfe/detalhe_exportacao_test.rb +97 -0
  211. data/test/br_nfe/product/nfe/item_tax/cofins_st_test.rb +22 -0
  212. data/test/br_nfe/product/nfe/item_tax/cofins_test.rb +113 -0
  213. data/test/br_nfe/product/nfe/item_tax/icms_test.rb +1011 -0
  214. data/test/br_nfe/product/nfe/item_tax/icms_uf_destino_test.rb +99 -0
  215. data/test/br_nfe/product/nfe/item_tax/importacao_test.rb +23 -0
  216. data/test/br_nfe/product/nfe/item_tax/ipi_test.rb +160 -0
  217. data/test/br_nfe/product/nfe/item_tax/issqn_test.rb +84 -0
  218. data/test/br_nfe/product/nfe/item_tax/pis_st_test.rb +22 -0
  219. data/test/br_nfe/product/nfe/item_tax/pis_test.rb +113 -0
  220. data/test/br_nfe/product/nfe/item_test.rb +381 -0
  221. data/test/br_nfe/product/nfe/processo_referencia_test.rb +30 -0
  222. data/test/br_nfe/product/nfe/transporte/base_test.rb +182 -0
  223. data/test/br_nfe/product/nfe/transporte/transportador_test.rb +13 -0
  224. data/test/br_nfe/product/nfe/transporte/veiculo_test.rb +13 -0
  225. data/test/br_nfe/product/nfe/transporte/volume_test.rb +42 -0
  226. data/test/br_nfe/product/nota_fiscal_test.rb +662 -0
  227. data/test/br_nfe/product/operation/base_test.rb +538 -0
  228. data/test/br_nfe/product/operation/nfe_autorizacao_test.rb +378 -0
  229. data/test/br_nfe/product/operation/nfe_consulta_protocolo_test.rb +349 -0
  230. data/test/br_nfe/product/operation/nfe_download_nf_test.rb +93 -0
  231. data/test/br_nfe/product/operation/nfe_inutilizacao_test.rb +210 -0
  232. data/test/br_nfe/product/operation/nfe_recepcao_evento_test.rb +84 -0
  233. data/test/br_nfe/product/operation/nfe_ret_autorizacao_test.rb +309 -0
  234. data/test/br_nfe/product/operation/nfe_status_servico_test.rb +122 -0
  235. data/test/br_nfe/product/response/base_test.rb +75 -0
  236. data/test/br_nfe/product/response/build/base_test.rb +34 -0
  237. data/test/br_nfe/product/response/nfe_ret_autorizacao_test.rb +14 -0
  238. data/test/br_nfe/service/association/have_intermediario_test.rb +10 -10
  239. data/test/br_nfe/service/base_test.rb +9 -206
  240. data/test/br_nfe/service/betha/v1/cancela_nfse_test.rb +8 -6
  241. data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +6 -3
  242. data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +6 -3
  243. data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +7 -4
  244. data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +12 -9
  245. data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +6 -3
  246. data/test/br_nfe/service/rps_test.rb +2 -2
  247. data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +6 -3
  248. data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +7 -4
  249. data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +7 -4
  250. data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +8 -5
  251. data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +9 -6
  252. data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +6 -3
  253. data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +6 -3
  254. data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +6 -3
  255. data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +6 -3
  256. data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +8 -5
  257. data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +9 -6
  258. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +6 -3
  259. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +6 -3
  260. data/test/factories/person.rb +1 -1
  261. data/test/factories/product/destinatario.rb +11 -0
  262. data/test/factories/product/emitente.rb +1 -1
  263. data/test/factories/product/evento/base.rb +9 -0
  264. data/test/factories/product/evento/cancelamento.rb +10 -0
  265. data/test/factories/product/gateway/web_service_am.rb +5 -0
  266. data/test/factories/product/gateway/web_service_ba.rb +5 -0
  267. data/test/factories/product/nfe/adicao_importacao.rb +7 -0
  268. data/test/factories/product/nfe/cobranca/duplicata.rb +7 -0
  269. data/test/factories/product/nfe/cobranca/fatura.rb +8 -0
  270. data/test/factories/product/nfe/cobranca/pagamento.rb +9 -0
  271. data/test/factories/product/nfe/declaracao_importacao.rb +10 -0
  272. data/test/factories/product/nfe/detalhe_exportacao.rb +5 -0
  273. data/test/factories/product/nfe/item.rb +24 -0
  274. data/test/factories/product/nfe/item_tax/cofins.rb +5 -0
  275. data/test/factories/product/nfe/item_tax/cofins_st.rb +5 -0
  276. data/test/factories/product/nfe/item_tax/icms.rb +9 -0
  277. data/test/factories/product/nfe/item_tax/icms_uf_destino.rb +11 -0
  278. data/test/factories/product/nfe/item_tax/importacao.rb +8 -0
  279. data/test/factories/product/nfe/item_tax/ipi.rb +6 -0
  280. data/test/factories/product/nfe/item_tax/issqn.rb +9 -0
  281. data/test/factories/product/nfe/item_tax/pis.rb +5 -0
  282. data/test/factories/product/nfe/item_tax/pis_st.rb +5 -0
  283. data/test/factories/product/nfe/processo_referencia.rb +6 -0
  284. data/test/factories/product/nfe/transporte/base.rb +5 -0
  285. data/test/factories/product/nfe/transporte/transportador.rb +7 -0
  286. data/test/factories/product/nfe/transporte/veiculo.rb +7 -0
  287. data/test/factories/product/nfe/transporte/volume.rb +5 -0
  288. data/test/factories/product/nota_fiscal.rb +22 -0
  289. data/test/factories/product/{base.rb → operation/base.rb} +1 -1
  290. data/test/factories/product/operation/nfe_autorizacao.rb +590 -0
  291. data/test/factories/product/operation/nfe_consulta_protocolo.rb +13 -0
  292. data/test/factories/product/operation/nfe_download_nf.rb +15 -0
  293. data/test/factories/product/operation/nfe_inutilizacao.rb +19 -0
  294. data/test/factories/product/operation/nfe_recepcao_evento.rb +14 -0
  295. data/test/factories/product/operation/nfe_ret_autorizacao.rb +13 -0
  296. data/test/factories/product/{consulta_status_servico.rb → operation/nfe_status_servico.rb} +1 -1
  297. data/test/factories/product/response/base.rb +12 -0
  298. data/test/factories/product/response/build/base.rb +6 -0
  299. data/test/factories/product/response/nfe_ret_autorizacao.rb +13 -0
  300. data/test/factories/service/emitente.rb +1 -1
  301. data/test/fixtures/product/operation/nfe_autorizacao/nfe_signed.xml +1 -0
  302. data/test/fixtures/product/response/v3.10/nfe_autorizacao/async_fail.xml +21 -0
  303. data/test/fixtures/product/response/v3.10/nfe_autorizacao/async_success.xml +25 -0
  304. data/test/fixtures/product/response/v3.10/nfe_autorizacao/nfe/with_proc.xml +1 -0
  305. data/test/fixtures/product/response/v3.10/nfe_autorizacao/nfe/without_proc.xml +1 -0
  306. data/test/fixtures/product/response/v3.10/nfe_autorizacao/original_xml.xml +1 -0
  307. data/test/fixtures/product/response/v3.10/nfe_autorizacao/sync_fail.xml +32 -0
  308. data/test/fixtures/product/response/v3.10/nfe_autorizacao/sync_success.xml +33 -0
  309. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_1.xml +1 -0
  310. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_2.xml +1 -0
  311. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_3.xml +1 -0
  312. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_cancel.xml +1 -0
  313. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/one_event.xml +1 -0
  314. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/fail.xml +22 -0
  315. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/nfe_original/with_proc.xml +1 -0
  316. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/nfe_original/without_proc.xml +1 -0
  317. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_many_with_cancel.xml +198 -0
  318. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_many_without_cancel.xml +199 -0
  319. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_one.xml +89 -0
  320. data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_without.xml +34 -0
  321. data/test/fixtures/product/response/v3.10/nfe_inutilizacao/fail.xml +29 -0
  322. data/test/fixtures/product/response/v3.10/nfe_inutilizacao/success.xml +30 -0
  323. data/test/fixtures/product/response/v3.10/nfe_recepcao_evento/cancelamento/fail.xml +34 -0
  324. data/test/fixtures/product/response/v3.10/nfe_recepcao_evento/cancelamento/success.xml +36 -0
  325. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_fail.xml +22 -0
  326. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_fail.xml +33 -0
  327. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_fail_and_one_ok.xml +46 -0
  328. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_ok.xml +34 -0
  329. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_two_invoice_fail.xml +46 -0
  330. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_two_invoice_ok.xml +46 -0
  331. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_2_with_protocol.xml +1 -0
  332. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_2_without_protocol.xml +1 -0
  333. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_3_with_protocol.xml +1 -0
  334. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_3_without_protocol.xml +1 -0
  335. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/lot.xml +2 -0
  336. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/nfe.xml +2 -0
  337. data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/nfeProc.xml +4 -0
  338. data/test/fixtures/product/response/v3.10/nfe_status_servico/fail.xml +23 -0
  339. data/test/fixtures/product/response/v3.10/nfe_status_servico/success.xml +22 -0
  340. data/test/fixtures/product/schemas/CCe_v1.00.xsd +11 -0
  341. data/test/fixtures/product/schemas/EPEC_v1.00.xsd +9 -0
  342. data/test/fixtures/product/schemas/LeiauteCadastroEmissorDFe_v1.01.xsd +234 -0
  343. data/test/fixtures/product/schemas/SuframaInternaliza_v1.00.xsd +9 -0
  344. data/test/fixtures/product/schemas/SuframaVistoria_v1.00.xsd +9 -0
  345. data/test/fixtures/product/schemas/atuCadEmiDFe_v1.01.xsd +9 -0
  346. data/test/fixtures/product/schemas/cabecMsg_v1.02.xsd +29 -0
  347. data/test/fixtures/product/schemas/cadEmiDFe_v1.01.xsd +9 -0
  348. data/test/fixtures/product/schemas/cancNFe_v2.00.xsd +9 -0
  349. data/test/fixtures/product/schemas/confRecebto_v1.00.xsd +9 -0
  350. data/test/fixtures/product/schemas/consCad_v2.00.xsd +9 -0
  351. data/test/fixtures/product/schemas/consDPEC_v1.01.xsd +9 -0
  352. data/test/fixtures/product/schemas/consNFeDest_v1.01.xsd +10 -0
  353. data/test/fixtures/product/schemas/consReciNFe_v2.00.xsd +9 -0
  354. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consReciNFe_v3.10.xsd +8 -8
  355. data/test/fixtures/product/schemas/consSitNFe_v2.01.xsd +10 -0
  356. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consSitNFe_v3.10.xsd +8 -8
  357. data/test/fixtures/product/schemas/consStatServ_v2.00.xsd +9 -0
  358. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consStatServ_v3.10.xsd +8 -8
  359. data/test/fixtures/product/schemas/distDFeInt_v1.00.xsd +71 -0
  360. data/test/fixtures/product/schemas/downloadNFe_v1.00.xsd +10 -0
  361. data/test/fixtures/product/schemas/e110110_v1.00.xsd +58 -0
  362. data/test/fixtures/product/schemas/e110111_v1.00.xsd +42 -0
  363. data/test/fixtures/product/schemas/e110140_v1.00.xsd +124 -0
  364. data/test/fixtures/product/schemas/e111500_v1.00.xsd +69 -0
  365. data/test/fixtures/product/schemas/e111501_v1.00.xsd +69 -0
  366. data/test/fixtures/product/schemas/e111502_v1.00.xsd +50 -0
  367. data/test/fixtures/product/schemas/e111503_v1.00.xsd +50 -0
  368. data/test/fixtures/product/schemas/e210200_v1.00.xsd +32 -0
  369. data/test/fixtures/product/schemas/e210210_v1.00.xsd +32 -0
  370. data/test/fixtures/product/schemas/e210220_v1.00.xsd +45 -0
  371. data/test/fixtures/product/schemas/e210240_v1.00.xsd +44 -0
  372. data/test/fixtures/product/schemas/e411500_v1.00.xsd +134 -0
  373. data/test/fixtures/product/schemas/e411501_v1.00.xsd +134 -0
  374. data/test/fixtures/product/schemas/e411502_v1.00.xsd +95 -0
  375. data/test/fixtures/product/schemas/e411503_v1.00.xsd +95 -0
  376. data/test/fixtures/product/schemas/e990900_v1.00.xsd +87 -0
  377. data/test/fixtures/product/schemas/e990910_v1.00.xsd +81 -0
  378. data/test/fixtures/product/schemas/envCCe_v1.00.xsd +10 -0
  379. data/test/fixtures/product/schemas/envCancelPProrrogNFe_v1.0.xsd +50 -0
  380. data/test/fixtures/product/schemas/envConfRecebto_v1.00.xsd +9 -0
  381. data/test/fixtures/product/schemas/envDPEC_v1.01.xsd +9 -0
  382. data/test/fixtures/product/schemas/envEPEC_v1.00.xsd +9 -0
  383. data/test/fixtures/product/schemas/envEventoCancNFe_v1.00.xsd +9 -0
  384. data/test/fixtures/product/schemas/envEvento_v1.00.xsd +9 -0
  385. data/test/fixtures/product/schemas/envFiscoNfe_v1.0.xsd +179 -0
  386. data/test/fixtures/product/schemas/envPProrrogNFe_v1.0.xsd +65 -0
  387. data/test/fixtures/product/schemas/envRemIndus_v1.00.xsd +9 -0
  388. data/test/fixtures/product/schemas/envSuframaInternaliza_v1.00.xsd +10 -0
  389. data/test/fixtures/product/schemas/envSuframaVistoria_v1.00.xsd +10 -0
  390. data/test/fixtures/product/schemas/enviNFe_v2.00.xsd +9 -0
  391. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/enviNFe_v3.10.xsd +8 -8
  392. data/test/fixtures/product/schemas/eventoCancNFe_v1.00.xsd +9 -0
  393. data/test/fixtures/product/schemas/eventoEPEC_v0.01.xsd +267 -0
  394. data/test/fixtures/product/schemas/eventoEPEC_v1.00.xsd +267 -0
  395. data/test/fixtures/product/schemas/eventoRemIndus_v1.00.xsd +9 -0
  396. data/test/fixtures/product/schemas/inutNFe_v2.00.xsd +9 -0
  397. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/inutNFe_v3.10.xsd +8 -8
  398. data/test/fixtures/product/schemas/leiauteCCe_v1.00.xsd +418 -0
  399. data/test/fixtures/product/schemas/leiauteCancNFe_v2.00.xsd +143 -0
  400. data/test/fixtures/product/schemas/leiauteConfRecebto_v1.00.xsd +406 -0
  401. data/test/fixtures/product/schemas/leiauteConsNFeDest_v1.01.xsd +483 -0
  402. data/test/fixtures/product/schemas/leiauteConsSitNFe_v2.01.xsd +548 -0
  403. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteConsSitNFe_v3.10.xsd +502 -502
  404. data/test/fixtures/product/schemas/leiauteConsStatServ_v2.00.xsd +98 -0
  405. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteConsStatServ_v3.10.xsd +97 -97
  406. data/test/fixtures/product/schemas/leiauteConsultaCadastro_v1.01.xsd +355 -0
  407. data/test/fixtures/product/schemas/leiauteConsultaCadastro_v2.00.xsd +404 -0
  408. data/test/fixtures/product/schemas/leiauteDPEC_v1.01.xsd +464 -0
  409. data/test/fixtures/product/schemas/leiauteDownloadNFe_v1.00.xsd +149 -0
  410. data/test/fixtures/product/schemas/leiauteEPEC_v1.00.xsd +459 -0
  411. data/test/fixtures/product/schemas/leiauteEventoCancNFe_v1.00.xsd +394 -0
  412. data/test/fixtures/product/schemas/leiauteEvento_v1.00.xsd +373 -0
  413. data/test/fixtures/product/schemas/leiauteInutNFe_v2.00.xsd +193 -0
  414. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteInutNFe_v3.10.xsd +192 -192
  415. data/test/fixtures/product/schemas/leiauteNFe_v2.00.xsd +6661 -0
  416. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteNFe_v3.10.xsd +6060 -6060
  417. data/test/fixtures/product/schemas/leiauteRemIndus_v1.00.xsd +382 -0
  418. data/test/fixtures/product/schemas/leiauteSRE_v1.00.xsd +372 -0
  419. data/test/fixtures/product/schemas/leiauteSuframaInternaliza_v1.00.xsd +642 -0
  420. data/test/fixtures/product/schemas/leiauteSuframaVistoria_v1.00.xsd +648 -0
  421. data/test/fixtures/product/schemas/nfe_v2.00.xsd +9 -0
  422. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/nfe_v3.10.xsd +8 -8
  423. data/test/fixtures/product/schemas/procCCeNFe_v1.00.xsd +10 -0
  424. data/test/fixtures/product/schemas/procCancNFe_v2.00.xsd +9 -0
  425. data/test/fixtures/product/schemas/procConfRecebtoNFe_v1.00.xsd +9 -0
  426. data/test/fixtures/product/schemas/procEPEC_v1.00.xsd +9 -0
  427. data/test/fixtures/product/schemas/procEventoCancNFe_v1.00.xsd +9 -0
  428. data/test/fixtures/product/schemas/procEventoNFe_v1.00.xsd +9 -0
  429. data/test/fixtures/product/schemas/procEventoNFe_v99.99.xsd +37 -0
  430. data/test/fixtures/product/schemas/procInutNFe_v2.00.xsd +9 -0
  431. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/procInutNFe_v3.10.xsd +8 -8
  432. data/test/fixtures/product/schemas/procNFe_v2.00.xsd +9 -0
  433. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/procNFe_v3.10.xsd +8 -8
  434. data/test/fixtures/product/schemas/procRemIndus_v1.00.xsd +9 -0
  435. data/test/fixtures/product/schemas/resEvento_v1.00.xsd +94 -0
  436. data/test/fixtures/product/schemas/resNFe_v1.00.xsd +110 -0
  437. data/test/fixtures/product/schemas/retAtuCadEmiDFe_v1.01.xsd +9 -0
  438. data/test/fixtures/product/schemas/retCancNFe_v2.00.xsd +9 -0
  439. data/test/fixtures/product/schemas/retConsCad_v2.00.xsd +9 -0
  440. data/test/fixtures/product/schemas/retConsDPEC_v1.01.xsd +9 -0
  441. data/test/fixtures/product/schemas/retConsReciNFe_v2.00.xsd +9 -0
  442. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsReciNFe_v3.10.xsd +8 -8
  443. data/test/fixtures/product/schemas/retConsSitNFe_v2.01.xsd +10 -0
  444. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsSitNFe_v3.10.xsd +8 -8
  445. data/test/fixtures/product/schemas/retConsStatServ_v2.00.xsd +9 -0
  446. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsStatServ_v3.10.xsd +8 -8
  447. data/test/fixtures/product/schemas/retDPEC_v1.01.xsd +9 -0
  448. data/test/fixtures/product/schemas/retDistDFeInt_v1.00.xsd +84 -0
  449. data/test/fixtures/product/schemas/retDownloadNFe_v1.00.xsd +9 -0
  450. data/test/fixtures/product/schemas/retEnvCCe_v1.00.xsd +10 -0
  451. data/test/fixtures/product/schemas/retEnvCancelPProrrogNFe_v1.0.xsd +231 -0
  452. data/test/fixtures/product/schemas/retEnvConfRecebto_v1.00.xsd +9 -0
  453. data/test/fixtures/product/schemas/retEnvEPEC_v1.00.xsd +9 -0
  454. data/test/fixtures/product/schemas/retEnvEventoCancNFe_v1.00.xsd +9 -0
  455. data/test/fixtures/product/schemas/retEnvEvento_v1.00.xsd +9 -0
  456. data/test/fixtures/product/schemas/retEnvFiscoNFe_v1.0.xsd +234 -0
  457. data/test/fixtures/product/schemas/retEnvRemIndus_v1.00.xsd +9 -0
  458. data/test/fixtures/product/schemas/retEnvSuframaInternaliza_v1.00.xsd +9 -0
  459. data/test/fixtures/product/schemas/retEnvSuframaVistoria_v1.00.xsd +9 -0
  460. data/test/fixtures/product/schemas/retEnviNFe_v2.00.xsd +9 -0
  461. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retEnviNFe_v3.10.xsd +8 -8
  462. data/test/fixtures/product/schemas/retEventoEPEC_v0.01.xsd +207 -0
  463. data/test/fixtures/product/schemas/retInutNFe_v2.00.xsd +9 -0
  464. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retInutNFe_v3.10.xsd +8 -8
  465. data/test/fixtures/product/schemas/retPProrrogNFe_v1.0.xsd +233 -0
  466. data/test/fixtures/product/schemas/retconsNFeDest_v1.01.xsd +9 -0
  467. data/test/fixtures/product/schemas/tiposBasico_v1.03.xsd +816 -0
  468. data/test/fixtures/product/schemas/tiposBasico_v1.03_OPENSSL.xsd +816 -0
  469. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/tiposBasico_v3.10.xsd +571 -571
  470. data/test/fixtures/product/schemas/tiposBasico_v3.10_OPENSSL.xsd +877 -0
  471. data/test/fixtures/product/schemas/tiposDistDFe_v1.00.xsd +217 -0
  472. data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/xmldsig-core-schema_v1.01.xsd +97 -97
  473. data/test/fixtures/product/wsdl/NFeRetAutorizacao.xml +80 -0
  474. data/test/fixtures/product/wsdl/NfeAutorizacao.xml +107 -0
  475. data/test/fixtures/product/wsdl/NfeConsulta2.xml +80 -0
  476. data/test/fixtures/product/wsdl/NfeStatusServico2.xml +70 -0
  477. data/test/fixtures/product/wsdl/nfeinutilizacao2.xml +80 -0
  478. data/test/fixtures/service/wsdl/betha/v1/cancelar_nfse.xml +178 -0
  479. data/test/fixtures/service/wsdl/betha/v1/consultar_lote_rps.xml +339 -0
  480. data/test/fixtures/service/wsdl/betha/v1/consultar_nfse.xml +348 -0
  481. data/test/fixtures/service/wsdl/betha/v1/consultar_nfse_por_rps.xml +365 -0
  482. data/test/fixtures/service/wsdl/betha/v1/consultar_situacao_lote_rps.xml +74 -0
  483. data/test/fixtures/service/wsdl/betha/v1/recepcionar_lote_rps.xml +299 -0
  484. data/test/fixtures/service/wsdl/simpliss/v1/nfseservice.xml +1 -0
  485. data/test/fixtures/service/wsdl/thema/v1/nfse_cancelamento.xml +82 -0
  486. data/test/fixtures/service/wsdl/thema/v1/nfse_consulta.xml +235 -0
  487. data/test/fixtures/service/wsdl/thema/v1/nfse_remessa.xml +185 -0
  488. data/test/test_helper.rb +369 -1
  489. metadata +711 -33
  490. data/lib/br_nfe/product/base.rb +0 -82
  491. data/lib/br_nfe/product/consulta_status_servico.rb +0 -35
  492. data/lib/br_nfe/product/value_nf.rb +0 -9
  493. data/lib/br_nfe/product/xml/v3_10/consulta_status_servico.xml.slim +0 -4
  494. data/test/br_nfe/product/base_test.rb +0 -150
  495. data/test/br_nfe/product/consulta_status_servico_test.rb +0 -59
@@ -0,0 +1,70 @@
1
+ module BrNfe
2
+ module Product
3
+ module Operation
4
+ class NfeRecepcaoEvento < Base
5
+
6
+ # NÚMERO DO LOTE
7
+ # Identificador de controle do Lote de envio do Evento.
8
+ # Número sequencial autoincremental único para identificação
9
+ # do Lote. A responsabilidade de gerar e controlar é exclusiva
10
+ # do autor do evento. O Web Service não faz qualquer uso
11
+ # deste identificador.
12
+ #
13
+ # <b>Type: </b> _Number_
14
+ # <b>Required: </b> _Yes_
15
+ # <b>Example: </b> _20161230135547_
16
+ # <b>Length: </b> _max: 15_
17
+ # <b>tag: </b> idLote
18
+ #
19
+ attr_accessor :numero_lote
20
+ alias_attribute :idLote, :numero_lote
21
+
22
+ # EVENTO DE CANCELAMENTO
23
+ # Só pode haver 1 evento do tipo cancelamento por Lote.
24
+ #
25
+ has_one :cancelamento, 'BrNfe.cancelamento_product_class'
26
+
27
+ validate_has_one :cancelamento
28
+
29
+ validates :numero_lote, presence: true
30
+ validates :numero_lote, numericality: {only_integer: true}, allow_blank: true
31
+ validates :numero_lote, length: {maximum: 15}, allow_blank: true
32
+
33
+ # URL do webservice para enviar as informações.
34
+ # Ex:
35
+ # https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
36
+ def wsdl
37
+ gateway.wsdl_recepcao_evento
38
+ end
39
+
40
+ # Método SOAP que será chamado para enviar o XML
41
+ def method_wsdl
42
+ gateway.operation_recepcao_evento
43
+ end
44
+
45
+ # Versão utilizada pelo webservice do estado para determinada ação.
46
+ def gateway_xml_version
47
+ gateway.version_xml_recepcao_evento
48
+ end
49
+
50
+ # URL que será setada no atribto xmlns do XML;
51
+ # Ex:
52
+ # nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
53
+ def url_xmlns
54
+ gateway.url_xmlns_recepcao_evento
55
+ end
56
+
57
+ # Versão SSL utilizada pelo webservice
58
+ def ssl_version
59
+ gateway.ssl_version_recepcao_evento
60
+ end
61
+
62
+ # XML que será enviado no body da requisição SOAP contendo as informações
63
+ # específicas de cada operação.
64
+ def xml_builder
65
+ @xml_builder ||= render_xml 'root/NfeRecepcaoEvento'
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,63 @@
1
+ module BrNfe
2
+ module Product
3
+ module Operation
4
+ class NfeRetAutorizacao < Base
5
+ # NÚMERO DO RECIBO/PROTOCOLO
6
+ # Número gerado pelo Portal da Secretaria de
7
+ # Fazenda Estadual
8
+ #
9
+ # <b>Type: </b> _Number_
10
+ # <b>Required: </b> _Yes_
11
+ # <b>Example: </b> _42201612301355_
12
+ # <b>Length: </b> _max: 15_
13
+ # <b>tag: </b> nRec
14
+ #
15
+ attr_accessor :numero_recibo
16
+ alias_attribute :nRec, :numero_recibo
17
+
18
+ validates :numero_recibo, presence: true
19
+ validates :numero_recibo, numericality: {only_integer: true}, allow_blank: true
20
+ validates :numero_recibo, length: {maximum: 15}, allow_blank: true
21
+
22
+ # URL do webservice para enviar as informações.
23
+ # Ex:
24
+ # https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
25
+ def wsdl
26
+ gateway.wsdl_retorno_autorizacao
27
+ end
28
+
29
+ # Método SOAP que será chamado para enviar o XML
30
+ def method_wsdl
31
+ gateway.operation_retorno_autorizacao
32
+ end
33
+
34
+ # Versão utilizada pelo webservice do estado para determinada ação.
35
+ def gateway_xml_version
36
+ gateway.version_xml_retorno_autorizacao
37
+ end
38
+
39
+ # URL que será setada no atribto xmlns do XML;
40
+ # Ex:
41
+ # nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
42
+ def url_xmlns
43
+ gateway.url_xmlns_retorno_autorizacao
44
+ end
45
+
46
+ # Versão SSL utilizada pelo webservice
47
+ def ssl_version
48
+ gateway.ssl_version_retorno_autorizacao
49
+ end
50
+
51
+ # XML que será enviado no body da requisição SOAP contendo as informações
52
+ # específicas de cada operação.
53
+ def xml_builder
54
+ @xml_builder ||= render_xml 'root/NfeRetAutorizacao'
55
+ end
56
+
57
+ def response_class_builder
58
+ BrNfe::Product::Response::Build::NfeRetAutorizacao
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,46 @@
1
+ module BrNfe
2
+ module Product
3
+ module Operation
4
+ class NfeStatusServico < Base
5
+ # URL que será setada no atribto xmlns do XML;
6
+ # Ex:
7
+ # nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
8
+ def url_xmlns
9
+ gateway.url_xmlns_status_servico
10
+ end
11
+
12
+ # URL do webservice para enviar as informações.
13
+ # Ex:
14
+ # https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
15
+ def wsdl
16
+ gateway.wsdl_status_servico
17
+ end
18
+
19
+ # Método SOAP que será chamado para enviar o XML
20
+ def method_wsdl
21
+ gateway.operation_status_servico
22
+ end
23
+
24
+ # Versão utilizada pelo webservice do estado para determinada ação.
25
+ def gateway_xml_version
26
+ gateway.version_xml_status_servico
27
+ end
28
+
29
+ # Versão SSL utilizada pelo webservice
30
+ def ssl_version
31
+ gateway.ssl_version_status_servico
32
+ end
33
+
34
+ # XML que será enviado no body da requisição SOAP contendo as informações
35
+ # específicas de cada operação.
36
+ def xml_builder
37
+ @xml_builder ||= render_xml 'root/NfeStatusServico'
38
+ end
39
+
40
+ def response_class_builder
41
+ BrNfe::Product::Response::Build::NfeStatusServico
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,97 @@
1
+ module BrNfe
2
+ module Product
3
+ module Response
4
+ class Base < BrNfe::ActiveModelBase
5
+
6
+ # XML ORIGINAL ENVIADO PELA SEFAZ
7
+ attr_accessor :soap_xml
8
+
9
+ # AMBIENTE DO PROCESSAMENTO
10
+ attr_accessor :environment
11
+ alias_attribute :tpAmb, :environment
12
+ def environment
13
+ if @environment.to_i == 1
14
+ :production
15
+ else
16
+ :test
17
+ end
18
+ end
19
+
20
+ # Versão do aplicativo da SEFAZ
21
+ attr_accessor :app_version
22
+ alias_attribute :verAplic, :app_version
23
+
24
+ # DATA E HORA DO PROCESSAMENTO DA REQUISIÇÃO
25
+ #
26
+ attr_accessor :processed_at
27
+ def processed_at
28
+ convert_to_time(@processed_at)
29
+ end
30
+ alias_attribute :dhRecbto, :processed_at
31
+
32
+ # PROTOCOLO / NÚMERO DO RECIBO
33
+ # Número do Recibo gerado pelo Portal da
34
+ # Secretaria de Fazenda Estadual
35
+ #
36
+ attr_accessor :protocol
37
+ alias_attribute :nRec, :protocol
38
+
39
+ # STATUS PARA SABER SE A REQUISIÇÃO PARA A SEFAZ FOI BEM SUCEDIDA
40
+ # Pode ocorrer erros como HTTPError quando o servidor está offline.
41
+ # Nesses casos a requsição sempre será tratada e adicionado as mensagens
42
+ # de erro no attr :request_message_error
43
+ #
44
+ # Status possíveis:
45
+ # + :success = Requisição efetuada com sucesso e contém um XML para verificação dos dados
46
+ # + :soap_error = Quando houve um erro do tipo Savon::SOAPFault
47
+ # + :http_error = Quando houve um erro do tipo Savon::HTTPError
48
+ # + :unknown_error = Quando houve outro erro desconhecido
49
+ #
50
+ attr_accessor :request_status
51
+ attr_accessor :request_message_error
52
+
53
+ # STATUS DO PROCESSAMENTO DA OPERAÇÃO
54
+ # Esse status é utilizado para saber se a operação
55
+ # foi processada com sucesso ou não.
56
+ # Será preenchida apenas se o attr :request_status for :success
57
+ #
58
+ # Retornos possíveis:
59
+ # + :success - Quando a operação requisitada foi processada e obteve
60
+ # sucesso no processamento. Será necessário verificar o
61
+ # status individual de cada operação.
62
+ #
63
+ # + :processing - Quando ainda está em processamento e será necessário
64
+ # fazer uma nova requisição.
65
+ #
66
+ # + :offline - Quando o serviço estiver offline
67
+ #
68
+ # + :denied - Quando o acesso foi denegado
69
+ #
70
+ # + :error - Quando houve algum erro no processamento
71
+ #
72
+ attr_accessor :processing_status_code
73
+ alias_attribute :cStat, :processing_status_code
74
+ attr_accessor :processing_status_motive
75
+ alias_attribute :xMotivo, :processing_status_motive
76
+
77
+ def processing_status
78
+ if "#{processing_status_code} ".strip.in?( BrNfe::Constants::NFE_STATUS_SUCCESS )
79
+ :success
80
+ elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_PROCESSING )
81
+ :processing
82
+ elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_OFFLINE )
83
+ :offline
84
+ elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_DENIED )
85
+ :denied
86
+ else
87
+ :error
88
+ end
89
+ end
90
+
91
+ def processed_successfully?
92
+ processing_status == :success
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,287 @@
1
+ module BrNfe
2
+ module Product
3
+ module Response
4
+ module Build
5
+ class Base < BrNfe::ActiveModelBase
6
+ attr_accessor :savon_response
7
+ attr_accessor :operation
8
+
9
+ def original_xml
10
+ @original_xml ||= operation.original_xml || operation.xml_builder
11
+ end
12
+
13
+ # Responsável por instanciar o objeto de resposta contendo os valores
14
+ # pertinentes a cada operação.
15
+ #
16
+ def response
17
+ return @response if @response
18
+ @response = response_class.new({
19
+ soap_xml: savon_response.try(:xml).try(:force_encoding, 'UTF-8'),
20
+ request_status: :success
21
+ })
22
+ @response.assign_attributes(specific_attributes)
23
+ @response
24
+ end
25
+
26
+ # Responsável por definir a classe da resposta que será instânciada
27
+ # para cada operação.
28
+ # Esse método deve ser sobrescrito para cada operação.
29
+ #
30
+ # <b>Type: </b> _Class_
31
+ #
32
+ def response_class
33
+ BrNfe::Product::Response::Base
34
+ end
35
+
36
+ # É utilizado para setar os atributos específicos para
37
+ # o retorno de cada operação.
38
+ # É útil para evitar sobrescrever e duplicar código do
39
+ # método response
40
+ #
41
+ # <b>Type: </b> _Hash_
42
+ #
43
+ def specific_attributes
44
+ {}
45
+ end
46
+
47
+ # Responsável por identificar o xmlns principal da resposta.
48
+ # Esse valor é utilizado para dar o Start para encontrar o conteúdo
49
+ # na arvore de tags xml.
50
+ #
51
+ # <b>Type: </b> _String_
52
+ #
53
+ def url_xmlns_retorno
54
+ @url_xmlns_retorno ||= header_xml.collect_namespaces['xmlns']
55
+ end
56
+
57
+ # Responsável por trazer qual a versão do layout o XML da resposta
58
+ # foi feito.
59
+ # Irá converter a versão em Symbol e alterar o ponto(.) em underline(_).
60
+ # Também irá acrescentar um 'v' na frente da versão.
61
+ # Irá pegar a versão a partir da tag 'versaoDados' presente no Header
62
+ # da requisição Soap.
63
+ # É útil para saber como pegar as informações do XML, pois como cada
64
+ # versão pode ter uma estrutura diferente, o conteúdo desse método
65
+ # irá auxiliar na decisão de como buscar o conteúdo.
66
+ #
67
+ # Exemplos:
68
+ # Versão do XML Retorno
69
+ # '1.00' => :v1_00
70
+ # '2.01' => :v2_01
71
+ # '3.10' => :v3_10
72
+ #
73
+ # # <b>Type: </b> _Symbol_
74
+ #
75
+ def xml_version
76
+ return @xml_version if @xml_version
77
+ version = header_xml.xpath('//nf:nfeCabecMsg/nf:versaoDados', nf: url_xmlns_retorno).text
78
+ @xml_version = "v#{version.gsub('.','_')}".to_sym
79
+ end
80
+ # Versão do XML em forma de String
81
+ # ex: '3.10'
82
+ def xml_version_str
83
+ return @xml_version_str if @xml_version_str
84
+ @xml_version_str = header_xml.xpath('//nf:nfeCabecMsg/nf:versaoDados', nf: url_xmlns_retorno).text
85
+ end
86
+
87
+ # Responsável por pegar o conteúdo presente dentro da tag
88
+ # Body da resposta Soap.
89
+ # É útil para facilitar a busca e manupilação do XML presente
90
+ # dentro do Body da resposta Soap
91
+ #
92
+ # # <b>Type: </b> _Nokogiri::XML::Document_
93
+ #
94
+ def body_xml
95
+ @body_xml ||= parse_nokogiri_xml( response_xml.xpath('//soap:Envelope/soap:Body', 'xmlns:soap' => "http://www.w3.org/2003/05/soap-envelope").try(:children).try(:to_xml) )
96
+ end
97
+
98
+ # Responsável por pegar o conteúdo presente dentro da tag
99
+ # Header da resposta Soap.
100
+ # É útil para facilitar a busca e manupilação do XML presente
101
+ # dentro do Header da resposta Soap
102
+ #
103
+ # # <b>Type: </b> _Nokogiri::XML::Document_
104
+ #
105
+ def header_xml
106
+ @header_xml ||= parse_nokogiri_xml( response_xml.xpath('//soap:Envelope/soap:Header', 'xmlns:soap' => "http://www.w3.org/2003/05/soap-envelope").try(:children).try(:to_xml) )
107
+ end
108
+
109
+ # Responsável por converter a string xml a ser modificado
110
+ # em um Nokogiri::XML::Document
111
+ # É útil para evitar ficar dando o parse no xml toda vez que precisa
112
+ # ser utilizado.
113
+ #
114
+ # # <b>Type: </b> _Nokogiri::XML::Document_
115
+ #
116
+ def doc_original_xml
117
+ @doc_original_xml ||= parse_nokogiri_xml( original_xml )
118
+ end
119
+
120
+ # Contém o XML completo da resposta Soap.
121
+ # É útil para evitar ficar dando o parse no xml toda vez que precisa
122
+ # ser utilizado.
123
+ #
124
+ # # <b>Type: </b> _Nokogiri::XML::Document_
125
+ #
126
+ def response_xml
127
+ @response_xml ||= parse_nokogiri_xml(savon_response.try(:xml))
128
+ end
129
+
130
+ # XMLNS PADRÃO DA NOTA FISCAL
131
+ #
132
+ def nf_xmlns
133
+ 'http://www.portalfiscal.inf.br/nfe'
134
+ end
135
+
136
+ private
137
+
138
+ # Reponsável por converter uma string(XML) em um elemento
139
+ # da classe Nokogiri::XML::Document.
140
+ #
141
+ def parse_nokogiri_xml str_xml
142
+ if str_xml.include?('<?xml')
143
+ Nokogiri::XML(str_xml)
144
+ else
145
+ Nokogiri::XML('<?xml version="1.0" encoding="UTF-8"?>'+str_xml)
146
+ end
147
+ end
148
+
149
+ # Rsponsável por instânciar uma nota fiscal a partir da tag protNFe.
150
+ # Também vai setar o atributo xml específico da nota fiscal a partir
151
+ # do valor setado em :original_xml
152
+ #
153
+ # Deve ser passado por parâmetro um objeto da class Nokogiri::XML::Document
154
+ # com a estrutura do protocolo da NFE. EX:
155
+ # <protNFe versao="3.10">
156
+ # <infProt>
157
+ # <tpAmb>2</tpAmb>
158
+ # <verAplic>SVRS201611281548</verAplic>
159
+ # <chNFe>42161208897094000155550010000000031201601010</chNFe>
160
+ # <dhRecbto>2016-12-23T15:02:01-02:00</dhRecbto>
161
+ # <nProt>342160000820227</nProt>
162
+ # <digVal>eoBzPod21zF9/46jjOS2kLRyTPM=</digVal>
163
+ # <cStat>100</cStat>
164
+ # <xMotivo>Autorizado o uso da NF-e</xMotivo>
165
+ # </infProt>
166
+ # </protNFe>
167
+ #
168
+ # <b>Type: </b> _BrNfe.nota_fiscal_product_class_
169
+ #
170
+ def build_invoice_by_prot_nfe prot_nfe
171
+ invoice = BrNfe.nota_fiscal_product_class.new do |nfe|
172
+ nfe.processed_at = get_processed_at_from_prot_nfe( prot_nfe )
173
+ nfe.protocol = get_protocol_from_prot_nfe( prot_nfe )
174
+ nfe.digest_value = get_digest_value_from_prot_nfe( prot_nfe )
175
+ nfe.status_code = get_status_code_from_prot_nfe( prot_nfe )
176
+ nfe.status_motive = get_status_motive_from_prot_nfe( prot_nfe )
177
+ nfe.chave_de_acesso = get_access_key_from_prot_nfe( prot_nfe )
178
+ end
179
+ # 1° - Seta os valores possíveis encontrados na chave de acesso da NF-e
180
+ set_invoice_values_by_access_key!( invoice )
181
+
182
+ # 2° - Seta o XML da respectiva NF-e no objeto já com a tag <nfeProc>
183
+ # e a tag do protocolo(<protNFe>)
184
+ set_invoice_xml_with_prot_nfe!( invoice, prot_nfe )
185
+ invoice
186
+ end
187
+
188
+ def get_processed_at_from_prot_nfe prot_nfe
189
+ prot_nfe.xpath('//protNFe/infProt/dhRecbto').text
190
+ end
191
+ def get_protocol_from_prot_nfe prot_nfe
192
+ prot_nfe.xpath('//protNFe/infProt/nProt').text
193
+ end
194
+ def get_digest_value_from_prot_nfe prot_nfe
195
+ prot_nfe.xpath('//protNFe/infProt/digVal').text
196
+ end
197
+ def get_status_code_from_prot_nfe prot_nfe
198
+ prot_nfe.xpath('//protNFe/infProt/cStat').text
199
+ end
200
+ def get_status_motive_from_prot_nfe prot_nfe
201
+ prot_nfe.xpath('//protNFe/infProt/xMotivo').text
202
+ end
203
+ def get_access_key_from_prot_nfe prot_nfe
204
+ prot_nfe.xpath('//protNFe/infProt/chNFe').text
205
+ end
206
+
207
+ # Seta os valores que estão concatenados na chave da NF-e
208
+ # como o número da nota fiscal, cnpj do emitente, entre outros
209
+ # valores.
210
+ #
211
+ def set_invoice_values_by_access_key!(invoice)
212
+ if invoice.chave_de_acesso.present?
213
+ invoice.emitente.cnpj = invoice.chave_de_acesso[6..19]
214
+ invoice.modelo_nf = invoice.chave_de_acesso[20..21]
215
+ invoice.serie = invoice.chave_de_acesso[22..24]
216
+ invoice.numero_nf = invoice.chave_de_acesso[25..33].to_i
217
+ invoice.codigo_nf = invoice.chave_de_acesso[35..42].to_i
218
+ end
219
+ end
220
+
221
+ # Responsável por adicionar a tag <protNFe> dentro da tag <nfeProc>.
222
+ # Também irá setar o XMl atualizado no attr :xml da nota fiscal
223
+ #
224
+ def set_invoice_xml_with_prot_nfe!(invoice, prot_nfe)
225
+ if nfeProc = find_or_create_nfeProc_of_invoice_xml_by_access_key( invoice )
226
+ # Só adiciona o protocolo se a nota foi emitida com sucesso
227
+ if invoice.status == :success
228
+ add_prot_nfe_into_nfe_proc( nfeProc, prot_nfe )
229
+ end
230
+
231
+ invoice.xml = '<?xml version="1.0" encoding="UTF-8"?>'+canonicalize( nfeProc.to_xml )
232
+ end
233
+ end
234
+
235
+ # Responsável por adicionar o protocolo da NFe dentro da tag nfeProc
236
+ # a baixo da tag NFe.
237
+ # Caso já exista a tag protNFe não irá adiciona-lo novamente.
238
+ #
239
+ def add_prot_nfe_into_nfe_proc nfe_proc, prot_nfe
240
+ if nfe_proc.xpath('//nf:nfeProc/nf:protNFe', nf: nf_xmlns).blank?
241
+ nfe_proc.xpath('//nf:nfeProc', nf: nf_xmlns).
242
+ children.last.try(:add_next_sibling, prot_nfe.root.to_xml )
243
+ end
244
+ end
245
+
246
+ # Responsável por Encontrar ou Criar a estrutura nfeProc de uma
247
+ # Determinada nota fiscal.
248
+ # 1° Verifica se existe algum XML setado no objeto da nota, e se existir,
249
+ # irá montar a nfeProc da nota e retornar o documento XML
250
+ # 2° Caso não encontre o xml direto na NF, irá procurar o xml através
251
+ # do método original_xml.
252
+ #
253
+ # Estrutura de retorno:
254
+ # <nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
255
+ # <NFe>...</NFe>
256
+ # </nfeProc>
257
+ #
258
+ # <b>Type: </b> _Nokogiri::XML::Document_
259
+ #
260
+ def find_or_create_nfeProc_of_invoice_xml_by_access_key invoice
261
+ doc_nf = "#{invoice.xml}".strip.present? ? parse_nokogiri_xml("#{invoice.xml}") : parse_nokogiri_xml(original_xml)
262
+ if node = doc_nf.search("NFe/infNFe[@Id*=\"#{invoice.chave_de_acesso}\"]").first
263
+ if doc_nf.xpath('/*').first.try(:name) == 'nfeProc'
264
+ doc_nf
265
+ else
266
+ parse_nokogiri_xml( create_proc_tag( node.parent.to_s ) )
267
+ end
268
+ end
269
+ end
270
+
271
+ # Responsável por criar a tag <nfeProc> e adicionar o conteúdo
272
+ # passado por parâmetro dentro da tag.
273
+ # Deve ser passado o xml em forma de String.
274
+ #
275
+ # <b>Type: </b> _String_
276
+ #
277
+ def create_proc_tag nfe_xml
278
+ xml = "<nfeProc xmlns=\"#{nf_xmlns}\" versao=\"#{xml_version_str}\">"
279
+ xml << nfe_xml
280
+ xml << '</nfeProc>'
281
+ xml
282
+ end
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
@@ -0,0 +1,102 @@
1
+ module BrNfe
2
+ module Product
3
+ module Response
4
+ module Build
5
+ class NfeAutorizacao < Base
6
+
7
+ def notas_fiscais
8
+ operation.notas_fiscais
9
+ end
10
+
11
+ # Responsável por definir qual classe será instânciada para
12
+ # setar os valores de retorno referentes a cada operação.
13
+ #
14
+ # <b>Type: </b> _Class_
15
+ #
16
+ def response_class
17
+ BrNfe::Product::Response::NfeAutorizacao
18
+ end
19
+
20
+ # Responsável por setar os atributos específicos para
21
+ # cada tipo de operação.
22
+ #
23
+ # <b>Type: </b> _Hash_
24
+ #
25
+ def specific_attributes
26
+ attrs = {
27
+ environment: body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:tpAmb', nf: nf_xmlns, ret: url_xmlns_retorno).text,
28
+ app_version: body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:verAplic', nf: nf_xmlns, ret: url_xmlns_retorno).text,
29
+ processed_at: request_processed_at,
30
+
31
+ processing_status_code: get_processing_status_code,
32
+ processing_status_motive: get_processing_status_motive,
33
+ }
34
+
35
+ if async_protocol.present?
36
+ # Se entrar aqui é porque o lote é assíncrono e tem um protocolo
37
+ attrs[:protocol] = async_protocol
38
+ attrs[:tempo_medio] = body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:infRec/nf:tMed', nf: nf_xmlns, ret: url_xmlns_retorno).text
39
+ else
40
+ attrs[:protocol] = body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:protNFe/nf:infProt/nf:nProt', nf: nf_xmlns, ret: url_xmlns_retorno).text
41
+ end
42
+
43
+ manage_invoices!
44
+ attrs[:notas_fiscais] = notas_fiscais
45
+
46
+ attrs
47
+ end
48
+
49
+ def async_protocol
50
+ @async_protocol ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:infRec/nf:nRec', nf: nf_xmlns, ret: url_xmlns_retorno).text
51
+ end
52
+
53
+ def node_prot_nfe
54
+ body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:protNFe', nf: nf_xmlns, ret: url_xmlns_retorno)
55
+ end
56
+
57
+ def manage_invoices!
58
+ if async_protocol.present?
59
+ notas_fiscais.each do |nf|
60
+ nf.protocol = async_protocol
61
+ nf.processed_at = request_processed_at
62
+ nf.status_code = get_processing_status_code
63
+ nf.status_motive = get_processing_status_motive
64
+ end
65
+ elsif node_prot_nfe.present?
66
+ notas_fiscais.each do |nfe|
67
+ prot_nfe = parse_nokogiri_xml( node_prot_nfe.to_xml )
68
+ set_invoice_protocol!(nfe, prot_nfe)
69
+ end
70
+ end
71
+ end
72
+
73
+ def set_invoice_protocol! invoice, prot_nfe
74
+ invoice.processed_at = get_processed_at_from_prot_nfe( prot_nfe )
75
+ invoice.protocol = get_protocol_from_prot_nfe( prot_nfe )
76
+ invoice.digest_value = get_digest_value_from_prot_nfe( prot_nfe )
77
+ invoice.status_code = get_status_code_from_prot_nfe( prot_nfe )
78
+ invoice.status_motive = get_status_motive_from_prot_nfe( prot_nfe )
79
+ invoice.chave_de_acesso = get_access_key_from_prot_nfe( prot_nfe )
80
+
81
+ # Seta o XML da respectiva NF-e no objeto já com a tag <nfeProc>
82
+ # e a tag do protocolo(<protNFe>)
83
+ set_invoice_xml_with_prot_nfe!( invoice, prot_nfe ) if invoice.status == :success
84
+ end
85
+
86
+ private
87
+
88
+ def request_processed_at
89
+ @request_processed_at ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:dhRecbto', nf: nf_xmlns, ret: url_xmlns_retorno).text
90
+ end
91
+
92
+ def get_processing_status_code
93
+ @get_processing_status_code ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:cStat', nf: nf_xmlns, ret: url_xmlns_retorno).text
94
+ end
95
+ def get_processing_status_motive
96
+ @get_processing_status_motive ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:xMotivo', nf: nf_xmlns, ret: url_xmlns_retorno).text
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end