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,662 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::NotaFiscal do
4
+ subject { FactoryGirl.build(:product_nota_fiscal, emitente: emitente) }
5
+ let(:endereco) { FactoryGirl.build(:endereco) }
6
+ let(:emitente) { FactoryGirl.build(:product_emitente, endereco: endereco) }
7
+
8
+ let(:pagamento) { FactoryGirl.build(:product_cobranca_pagamento) }
9
+
10
+ describe "Alias attributes" do
11
+ it { must_have_alias_attribute :tpEmis, :codigo_tipo_emissao }
12
+ it { must_have_alias_attribute :cNF, :codigo_nf }
13
+ it { must_have_alias_attribute :nNF, :numero_nf }
14
+ it { must_have_alias_attribute :natOp, :natureza_operacao }
15
+ it { must_have_alias_attribute :indPag, :forma_pagamento }
16
+ it { must_have_alias_attribute :mod, :modelo_nf }
17
+ it { must_have_alias_attribute :dhEmi, :data_hora_emissao, Time.current.in_time_zone }
18
+ it { must_have_alias_attribute :dhSaiEnt, :data_hora_expedicao, Time.current.in_time_zone }
19
+ it { must_have_alias_attribute :tpNF, :tipo_operacao }
20
+ it { must_have_alias_attribute :tpEmis, :tipo_impressao }
21
+ it { must_have_alias_attribute :finNFe, :finalidade_emissao }
22
+ it { must_have_alias_attribute :indFinal, :consumidor_final, true }
23
+ it { must_have_alias_attribute :indPres, :presenca_comprador }
24
+ it { must_have_alias_attribute :procEmi, :processo_emissao }
25
+ it { must_have_alias_attribute :verProc, :versao_aplicativo, '0' }
26
+ it { must_have_alias_attribute :retirada, :endereco_retirada, BrNfe.endereco_class.new }
27
+ it { must_have_alias_attribute :entrega, :endereco_entrega, BrNfe.endereco_class.new }
28
+ it { must_have_alias_attribute :autXML, :autorizados_download_xml, ['12345678901'] }
29
+ it { must_have_alias_attribute :transp, :transporte,BrNfe.transporte_product_class.new }
30
+ it { must_have_alias_attribute :cobranca, :fatura, BrNfe.fatura_product_class.new }
31
+ it { must_have_alias_attribute :cobr, :fatura, BrNfe.fatura_product_class.new }
32
+ it { must_have_alias_attribute :pag, :pagamentos, [BrNfe.pagamento_product_class.new] }
33
+
34
+ it { must_have_alias_attribute :ICMSTot_vBC, :total_icms_base_calculo }
35
+ it { must_have_alias_attribute :ICMSTot_vICMS, :total_icms }
36
+ it { must_have_alias_attribute :ICMSTot_vICMSDeson, :total_icms_desonerado }
37
+ it { must_have_alias_attribute :ICMSTot_vFCPUFDest, :total_icms_fcp_uf_destino }
38
+ it { must_have_alias_attribute :ICMSTot_vICMSUFDest, :total_icms_uf_destino }
39
+ it { must_have_alias_attribute :ICMSTot_vICMSUFRemet, :total_icms_uf_origem }
40
+ it { must_have_alias_attribute :ICMSTot_vBCST, :total_icms_base_calculo_st }
41
+ it { must_have_alias_attribute :ICMSTot_vST, :total_icms_st }
42
+ it { must_have_alias_attribute :ICMSTot_vProd, :total_produtos }
43
+ it { must_have_alias_attribute :ICMSTot_vFrete, :total_frete }
44
+ it { must_have_alias_attribute :ICMSTot_vSeg, :total_seguro }
45
+ it { must_have_alias_attribute :ICMSTot_vDesc, :total_desconto }
46
+ it { must_have_alias_attribute :ICMSTot_vII, :total_imposto_importacao }
47
+ it { must_have_alias_attribute :ICMSTot_vIPI, :total_ipi }
48
+ it { must_have_alias_attribute :ICMSTot_vPIS, :total_pis }
49
+ it { must_have_alias_attribute :ICMSTot_vCOFINS, :total_cofins }
50
+ it { must_have_alias_attribute :ICMSTot_vOutro, :total_outras_despesas }
51
+ it { must_have_alias_attribute :ICMSTot_vNF, :total_nf }
52
+ it { must_have_alias_attribute :ICMSTot_vTotTrib, :total_tributos }
53
+ it { must_have_alias_attribute :ISSQNtot_vServ, :total_servicos }
54
+ it { must_have_alias_attribute :ISSQNtot_vBC, :total_servicos_base_calculo }
55
+ it { must_have_alias_attribute :ISSQNtot_vISS, :total_servicos_iss }
56
+ it { must_have_alias_attribute :ISSQNtot_vPIS, :total_servicos_pis }
57
+ it { must_have_alias_attribute :ISSQNtot_vCOFINS, :total_servicos_cofins }
58
+ it { must_have_alias_attribute :ISSQNtot_dCompet, :servicos_data_prestacao, Date.yesterday }
59
+ it { must_have_alias_attribute :ISSQNtot_vDeducao, :total_servicos_deducao }
60
+ it { must_have_alias_attribute :ISSQNtot_vOutro, :total_servicos_outras_retencoes }
61
+ it { must_have_alias_attribute :ISSQNtot_vDescIncond, :total_servicos_desconto_incondicionado }
62
+ it { must_have_alias_attribute :ISSQNtot_vDescCond, :total_servicos_desconto_condicionado }
63
+ it { must_have_alias_attribute :ISSQNtot_vISSRet, :total_servicos_iss_retido }
64
+ it { must_have_alias_attribute :ISSQNtot_cRegTrib, :regime_tributario_servico, 3 }
65
+ it { must_have_alias_attribute :retTrib_vRetPIS, :total_retencao_pis }
66
+ it { must_have_alias_attribute :retTrib_vRetCOFINS, :total_retencao_cofins }
67
+ it { must_have_alias_attribute :retTrib_vRetCSLL, :total_retencao_csll }
68
+ it { must_have_alias_attribute :retTrib_vBCIRRF, :total_retencao_base_calculo_irrf }
69
+ it { must_have_alias_attribute :retTrib_vIRRF, :total_retencao_irrf }
70
+ it { must_have_alias_attribute :retTrib_vBCRetPrev, :total_retencao_base_calculo_previdencia }
71
+ it { must_have_alias_attribute :retTrib_vRetPrev, :total_retencao_previdencia }
72
+ it { must_have_alias_attribute :infAdFisco, :informacoes_fisco }
73
+ it { must_have_alias_attribute :infCpl, :informacoes_contribuinte }
74
+ it { must_have_alias_attribute :procRef, :processos_referenciados, [BrNfe.processo_referencia_product_class.new] }
75
+ end
76
+ describe "#default_values" do
77
+ it '#versao_aplicativo deve ter o padrão 0' do
78
+ subject.class.new.versao_aplicativo.must_equal 0
79
+ end
80
+ it '#natureza_operacao deve ter o padrão Venda' do
81
+ subject.class.new.natureza_operacao.must_equal 'Venda'
82
+ end
83
+ it '#forma_pagamento deve ter o padrão 0' do
84
+ subject.class.new.forma_pagamento.must_equal 0
85
+ end
86
+ it '#modelo_nf deve ter o padrão 55' do
87
+ subject.class.new.modelo_nf.must_equal 55
88
+ end
89
+ it '#data_hora_emissao deve ter o padrão Time.current' do
90
+ subject.class.new.data_hora_emissao.to_s.must_equal Time.current.in_time_zone.to_s
91
+ end
92
+ it '#data_hora_expedicao deve ter o padrão Time.current' do
93
+ subject.class.new.data_hora_expedicao.to_s.must_equal Time.current.in_time_zone.to_s
94
+ end
95
+ it '#tipo_operacao deve ter o padrão 1' do
96
+ subject.class.new.tipo_operacao.must_be_within_delta 1
97
+ end
98
+ it '#tipo_impressao deve ter o padrão 1' do
99
+ subject.class.new.tipo_impressao.must_be_within_delta 1
100
+ end
101
+ it '#finalidade_emissao deve ter o padrão 1' do
102
+ subject.class.new.finalidade_emissao.must_be_within_delta 1
103
+ end
104
+ it '#presenca_comprador deve ter o padrão 9' do
105
+ subject.class.new.presenca_comprador.must_be_within_delta 9
106
+ end
107
+ it '#processo_emissao deve ter o padrão 0' do
108
+ subject.class.new.processo_emissao.must_be_within_delta 0
109
+ end
110
+ it '#codigo_tipo_emissao deve ter o padrão 1' do
111
+ subject.class.new.codigo_tipo_emissao.must_be_within_delta 1
112
+ end
113
+ end
114
+
115
+ describe "Validations" do
116
+ before do
117
+ MiniTest::Spec.string_for_validation_length = '1'
118
+ end
119
+ after do
120
+ MiniTest::Spec.string_for_validation_length = 'x'
121
+ end
122
+
123
+ context '#codigo_nf' do
124
+ it { must validate_presence_of(:codigo_nf) }
125
+ it { must validate_numericality_of(:codigo_nf).only_integer }
126
+ it { must validate_length_of(:codigo_nf).is_at_most(8) }
127
+ end
128
+ context '#serie' do
129
+ it { must validate_presence_of(:serie) }
130
+ it { must validate_numericality_of(:serie).only_integer }
131
+ it { must validate_length_of(:serie).is_at_most(3) }
132
+ it { must validate_exclusion_of(:serie).in_array([890, 899, 990, 999, '890', '899', '990', '999']) }
133
+ end
134
+ context '#numero_nf' do
135
+ it { must validate_presence_of(:numero_nf) }
136
+ it { must validate_numericality_of(:numero_nf).only_integer }
137
+ it { must validate_length_of(:numero_nf).is_at_most(9) }
138
+ end
139
+ context '#natureza_operacao' do
140
+ it { must validate_presence_of(:natureza_operacao) }
141
+ end
142
+ context '#forma_pagamento' do
143
+ it { must validate_presence_of(:forma_pagamento) }
144
+ it { must validate_inclusion_of(:forma_pagamento).in_array([0, 1, 2, '0', '1', '2']) }
145
+ end
146
+ context '#modelo_nf' do
147
+ it { must validate_presence_of(:modelo_nf) }
148
+ it { must validate_inclusion_of(:modelo_nf).in_array([55, 65, '55', '65']) }
149
+ end
150
+ context '#data_hora_emissao' do
151
+ it { must validate_presence_of(:data_hora_emissao) }
152
+ end
153
+ context '#data_hora_expedicao' do
154
+ it "deve ser obrigatório se for uma NF-e" do
155
+ subject.modelo_nf = 55
156
+ must validate_presence_of(:data_hora_expedicao)
157
+ end
158
+ it "não deve ser obrigatório se for uma NFC-e" do
159
+ subject.modelo_nf = 65
160
+ wont validate_presence_of(:data_hora_expedicao)
161
+ end
162
+ end
163
+ context '#tipo_operacao' do
164
+ it { must validate_presence_of(:tipo_operacao) }
165
+ it { must validate_inclusion_of(:tipo_operacao).in_array([0, 1, '0', '1']) }
166
+ end
167
+ context '#tipo_impressao' do
168
+ it { must validate_presence_of(:tipo_impressao) }
169
+ it { must validate_inclusion_of(:tipo_impressao).in_array([0, 1, 2, 3, 4, 5, '0', '1', '2', '3', '4', '5']) }
170
+ end
171
+ context '#presenca_comprador' do
172
+ it { must validate_presence_of(:presenca_comprador) }
173
+ it { must validate_inclusion_of(:presenca_comprador).in_array([0, 1, 2, 3, 4, 9, '0', '1', '2', '3', '4', '9']) }
174
+ end
175
+ context '#processo_emissao' do
176
+ it { must validate_presence_of(:processo_emissao) }
177
+ it { must validate_inclusion_of(:processo_emissao).in_array([0, 1, 2, 3, '0', '1', '2', '3']) }
178
+ end
179
+ context '#codigo_tipo_emissao' do
180
+ it { must validate_presence_of(:codigo_tipo_emissao) }
181
+ it { must validate_inclusion_of(:codigo_tipo_emissao).in_array([1, 6, 7, 9, '1', '6', '7', '9']) }
182
+ end
183
+ describe '#endereco_entrega_cpf_cnpj validations' do
184
+ context "quando o endereco_entrega for preenchido" do
185
+ before { subject.endereco_entrega = BrNfe.endereco_class.new }
186
+ it { must validate_presence_of(:endereco_entrega_cpf_cnpj) }
187
+ it { must validate_length_of(:endereco_entrega_cpf_cnpj).is_at_most(14) }
188
+ end
189
+ context "quando o endereco_entrega não for preenchido" do
190
+ before { subject.endereco_entrega = nil }
191
+ it { wont validate_presence_of(:endereco_entrega_cpf_cnpj) }
192
+ it { wont validate_length_of(:endereco_entrega_cpf_cnpj).is_at_most(14) }
193
+ end
194
+ end
195
+ describe '#endereco_retirada_cpf_cnpj validations' do
196
+ context "quando o endereco_retirada for preenchido" do
197
+ before { subject.endereco_retirada = BrNfe.endereco_class.new }
198
+ it { must validate_presence_of(:endereco_retirada_cpf_cnpj) }
199
+ it { must validate_length_of(:endereco_retirada_cpf_cnpj).is_at_most(14) }
200
+ end
201
+ context "quando o endereco_retirada não for preenchido" do
202
+ before { subject.endereco_retirada = nil }
203
+ it { wont validate_presence_of(:endereco_retirada_cpf_cnpj) }
204
+ it { wont validate_length_of(:endereco_retirada_cpf_cnpj).is_at_most(14) }
205
+ end
206
+ end
207
+ describe '#autorizados_download_xml' do
208
+ it 'deve no maximo 10' do
209
+ MiniTest::Spec.string_for_validation_length = ['1']
210
+ must validate_length_of(:autorizados_download_xml).is_at_most(10)
211
+ MiniTest::Spec.string_for_validation_length = 'x'
212
+ end
213
+ end
214
+
215
+ it { must validate_numericality_of(:total_icms_base_calculo).is_greater_than_or_equal_to(0.0).allow_nil }
216
+ it { must validate_numericality_of(:total_icms).is_greater_than_or_equal_to(0.0).allow_nil }
217
+ it { must validate_numericality_of(:total_icms_desonerado).is_greater_than_or_equal_to(0.0).allow_nil }
218
+ it { must validate_numericality_of(:total_icms_fcp_uf_destino).is_greater_than_or_equal_to(0.0).allow_nil }
219
+ it { must validate_numericality_of(:total_icms_uf_destino).is_greater_than_or_equal_to(0.0).allow_nil }
220
+ it { must validate_numericality_of(:total_icms_uf_origem).is_greater_than_or_equal_to(0.0).allow_nil }
221
+ it { must validate_numericality_of(:total_icms_base_calculo_st).is_greater_than_or_equal_to(0.0).allow_nil }
222
+ it { must validate_numericality_of(:total_icms_st).is_greater_than_or_equal_to(0.0).allow_nil }
223
+ it { must validate_numericality_of(:total_produtos).is_greater_than_or_equal_to(0.0).allow_nil }
224
+ it { must validate_numericality_of(:total_frete).is_greater_than_or_equal_to(0.0).allow_nil }
225
+ it { must validate_numericality_of(:total_seguro).is_greater_than_or_equal_to(0.0).allow_nil }
226
+ it { must validate_numericality_of(:total_desconto).is_greater_than_or_equal_to(0.0).allow_nil }
227
+ it { must validate_numericality_of(:total_imposto_importacao).is_greater_than_or_equal_to(0.0).allow_nil }
228
+ it { must validate_numericality_of(:total_ipi).is_greater_than_or_equal_to(0.0).allow_nil }
229
+ it { must validate_numericality_of(:total_pis).is_greater_than_or_equal_to(0.0).allow_nil }
230
+ it { must validate_numericality_of(:total_cofins).is_greater_than_or_equal_to(0.0).allow_nil }
231
+ it { must validate_numericality_of(:total_outras_despesas).is_greater_than_or_equal_to(0.0).allow_nil }
232
+ it { must validate_numericality_of(:total_nf).is_greater_than_or_equal_to(0.0).allow_nil }
233
+ it { must validate_numericality_of(:total_tributos).is_greater_than_or_equal_to(0.0).allow_nil }
234
+ it { must validate_numericality_of(:total_servicos).is_greater_than_or_equal_to(0.0).allow_nil }
235
+ it { must validate_numericality_of(:total_servicos_base_calculo).is_greater_than_or_equal_to(0.0).allow_nil }
236
+ it { must validate_numericality_of(:total_servicos_iss).is_greater_than_or_equal_to(0.0).allow_nil }
237
+ it { must validate_numericality_of(:total_servicos_pis).is_greater_than_or_equal_to(0.0).allow_nil }
238
+ it { must validate_numericality_of(:total_servicos_cofins).is_greater_than_or_equal_to(0.0).allow_nil }
239
+ describe '#servicos_data_prestacao' do
240
+ it "deve ser obrigatório se houver algum serviço" do
241
+ subject.stubs(:has_any_service?).returns(true)
242
+ must validate_presence_of(:servicos_data_prestacao)
243
+ end
244
+ it "não deve ser obrigatório se não houver serviços" do
245
+ subject.stubs(:has_any_service?).returns(false)
246
+ wont validate_presence_of(:servicos_data_prestacao)
247
+ end
248
+ end
249
+ it { must validate_numericality_of(:total_servicos_deducao).is_greater_than_or_equal_to(0.0).allow_nil }
250
+ it { must validate_numericality_of(:total_servicos_outras_retencoes).is_greater_than_or_equal_to(0.0).allow_nil }
251
+ it { must validate_numericality_of(:total_servicos_desconto_incondicionado).is_greater_than_or_equal_to(0.0).allow_nil }
252
+ it { must validate_numericality_of(:total_servicos_desconto_condicionado).is_greater_than_or_equal_to(0.0).allow_nil }
253
+ it { must validate_numericality_of(:total_servicos_iss_retido).is_greater_than_or_equal_to(0.0).allow_nil }
254
+ it { must validate_inclusion_of(:regime_tributario_servico).in_array([1,2,3,4,5,6]) }
255
+
256
+ it { must validate_numericality_of(:total_retencao_pis).is_greater_than_or_equal_to(0.0).allow_nil }
257
+ it { must validate_numericality_of(:total_retencao_cofins).is_greater_than_or_equal_to(0.0).allow_nil }
258
+ it { must validate_numericality_of(:total_retencao_csll).is_greater_than_or_equal_to(0.0).allow_nil }
259
+ it { must validate_numericality_of(:total_retencao_base_calculo_irrf).is_greater_than_or_equal_to(0.0).allow_nil }
260
+ it { must validate_numericality_of(:total_retencao_irrf).is_greater_than_or_equal_to(0.0).allow_nil }
261
+ it { must validate_numericality_of(:total_retencao_base_calculo_previdencia).is_greater_than_or_equal_to(0.0).allow_nil }
262
+ it { must validate_numericality_of(:total_retencao_previdencia).is_greater_than_or_equal_to(0.0).allow_nil }
263
+
264
+ it { must validate_inclusion_of(:exportacao_uf_saida).in_array(BrNfe::Constants::SIGLAS_UF-['EX']) }
265
+ end
266
+
267
+ describe '#nfe?' do
268
+ it "deve ser true se modelo_nf for 55" do
269
+ subject.modelo_nf = 55
270
+ subject.nfe?.must_equal true
271
+ subject.modelo_nf = '55'
272
+ subject.nfe?.must_equal true
273
+ end
274
+ it 'deve ser false se modelo_nf for diferente de 55' do
275
+ subject.modelo_nf = 65
276
+ subject.nfe?.must_equal false
277
+ subject.modelo_nf = '65'
278
+ subject.nfe?.must_equal false
279
+ end
280
+ end
281
+
282
+ describe '#nfce?' do
283
+ it "deve ser true se modelo_nf for 65" do
284
+ subject.modelo_nf = 65
285
+ subject.nfce?.must_equal true
286
+ subject.modelo_nf = '65'
287
+ subject.nfce?.must_equal true
288
+ end
289
+ it 'deve ser false se modelo_nf for diferente de 65' do
290
+ subject.modelo_nf = 55
291
+ subject.nfce?.must_equal false
292
+ subject.modelo_nf = '55'
293
+ subject.nfce?.must_equal false
294
+ end
295
+ end
296
+
297
+ describe 'chave_de_acesso' do
298
+ it "se já tem chave de acesso setada na variavel @chave_de_acesso não deve calcular a chave novamente" do
299
+ subject.chave_de_acesso = '123'
300
+ subject.chave_de_acesso.must_equal '123'
301
+ subject.instance_variable_get(:@chave_de_acesso).must_equal '123'
302
+ end
303
+ it "deve calcular a chave de acesso com o DV se não tiver chave setada" do
304
+ emitente.endereco.codigo_ibge_uf = '42'
305
+ subject.data_hora_emissao = Time.parse('2016-06-09')
306
+ emitente.cnpj = '01.498.013/0001-98'
307
+ subject.modelo_nf = 65
308
+ subject.serie = 1
309
+ subject.numero_nf = 664
310
+ subject.codigo_tipo_emissao = 7
311
+ subject.codigo_nf = 100
312
+
313
+ key = subject.chave_de_acesso
314
+ key.size.must_equal 44
315
+
316
+ key[0..1].must_equal '42' # UF
317
+ key[2..5].must_equal '1606' # Ano e mês da emissão
318
+ key[6..19].must_equal '01498013000198' # CNPJ
319
+ key[20..21].must_equal '65' # Modelo NF
320
+ key[22..24].must_equal '001' # Série
321
+ key[25..33].must_equal '000000664' # numero nf
322
+ key[34].must_equal '7' # Tipo emissão
323
+ key[35..42].must_equal '00000100' # codigo nf
324
+ key[43].must_equal '7' # DV
325
+
326
+ subject.instance_variable_get(:@chave_de_acesso).must_equal key
327
+ end
328
+ it "deve calcular a chave de acesso conforme exemplo da documentação" do
329
+ emitente.endereco.codigo_ibge_uf = '52'
330
+ subject.data_hora_emissao = Time.parse('2006-04-12')
331
+ emitente.cnpj = '33009911002506'
332
+ subject.modelo_nf = 55
333
+ subject.serie = 12
334
+ subject.numero_nf = '0780'
335
+ subject.codigo_tipo_emissao = 0
336
+ subject.codigo_nf = 26730161
337
+
338
+ key = subject.chave_de_acesso
339
+ key.size.must_equal 44
340
+
341
+ key[0..1].must_equal '52' # UF
342
+ key[2..5].must_equal '0604' # Ano e mês da emissão
343
+ key[6..19].must_equal '33009911002506' # CNPJ
344
+ key[20..21].must_equal '55' # Modelo NF
345
+ key[22..24].must_equal '012' # Série
346
+ key[25..33].must_equal '000000780' # numero nf
347
+ key[34].must_equal '0' # Tipo emissão
348
+ key[35..42].must_equal '26730161' # codigo nf
349
+ key[43].must_equal '5' # DV
350
+ end
351
+
352
+ it "deve calcular a chave de acesso conforme exemplo de uma NF-e válida" do
353
+ emitente.endereco.codigo_ibge_uf = '35'
354
+ subject.data_hora_emissao = Time.parse('2015-03-04')
355
+ emitente.cnpj = '00776574000741'
356
+ subject.modelo_nf = 55
357
+ subject.serie = 3
358
+ subject.numero_nf = 5616108
359
+ subject.codigo_tipo_emissao = 4
360
+ subject.codigo_nf = 65900349
361
+
362
+ key = subject.chave_de_acesso
363
+ key.size.must_equal 44
364
+
365
+ key[0..1].must_equal '35' # UF
366
+ key[2..5].must_equal '1503' # Ano e mês da emissão
367
+ key[6..19].must_equal '00776574000741' # CNPJ
368
+ key[20..21].must_equal '55' # Modelo NF
369
+ key[22..24].must_equal '003' # Série
370
+ key[25..33].must_equal '005616108' # numero nf
371
+ key[34].must_equal '4' # Tipo emissão
372
+ key[35..42].must_equal '65900349' # codigo nf
373
+ key[43].must_equal '0' # DV
374
+ end
375
+ end
376
+
377
+ describe '#chave_de_acesso_dv' do
378
+ it "deve pegar sempre o último dígido da chave_de_acesso" do
379
+ subject.chave_de_acesso = '35150300776574000741550030056161084659003490'
380
+ subject.chave_de_acesso_dv.must_equal '0'
381
+
382
+ subject.chave_de_acesso = '52060433009911002506550120000007800267301615'
383
+ subject.chave_de_acesso_dv.must_equal '5'
384
+
385
+ subject.chave_de_acesso = '5206043300991100250655012000000780026730161X'
386
+ subject.chave_de_acesso_dv.must_equal 'X'
387
+ end
388
+ end
389
+ describe '#chave_de_acesso_sem_dv' do
390
+ it "deve pegar sempre o último dígido da chave_de_acesso" do
391
+ subject.chave_de_acesso = '35150300776574000741550030056161084659003490'
392
+ subject.chave_de_acesso_sem_dv.must_equal '3515030077657400074155003005616108465900349'
393
+
394
+ subject.chave_de_acesso = '24729423849324793274947940000007800267301615'
395
+ subject.chave_de_acesso_sem_dv.must_equal '2472942384932479327494794000000780026730161'
396
+
397
+ subject.chave_de_acesso = '5206043300991100250655012000000780026730161X'
398
+ subject.chave_de_acesso_sem_dv.must_equal '5206043300991100250655012000000780026730161'
399
+ end
400
+ end
401
+
402
+ describe '#endereco_retirada' do
403
+ it { must_have_one(:endereco_retirada,
404
+ BrNfe.endereco_class,
405
+ {logradouro: 'LOG', numero: 'NR', bairro: "BRR"}
406
+ )}
407
+ it { must_validate_have_one(:endereco_retirada, BrNfe.endereco_class, :invalid_endereco_retirada) }
408
+ end
409
+
410
+ describe '#endereco_entrega' do
411
+ it '316' do
412
+ must_have_one(:endereco_entrega,
413
+ BrNfe.endereco_class,
414
+ {logradouro: 'LOG', numero: 'NR', bairro: "BRR"}
415
+ )
416
+ end
417
+ it { must_validate_have_one(:endereco_entrega, BrNfe.endereco_class, :invalid_endereco_entrega) }
418
+ end
419
+
420
+ describe '#autorizados_download_xml' do
421
+ it "deve inicializar com um array vazio" do
422
+ subject.class.new.autorizados_download_xml.must_be_kind_of Array
423
+ subject.class.new.autorizados_download_xml.must_be_empty
424
+ end
425
+ it "mesmo que setar um valor qualquer deve sempre retornar um array" do
426
+ subject.autorizados_download_xml = 123
427
+ subject.autorizados_download_xml.must_equal([123])
428
+ subject.autorizados_download_xml = 'xxx'
429
+ subject.autorizados_download_xml.must_equal(['xxx'])
430
+ subject.autorizados_download_xml = ['xxx',123]
431
+ subject.autorizados_download_xml.must_equal(['xxx',123])
432
+ end
433
+ it "deve desconsiderar os valores nil" do
434
+ subject.autorizados_download_xml = [nil,123,nil,'xxx',nil]
435
+ subject.autorizados_download_xml.must_equal([123,'xxx'])
436
+ subject.autorizados_download_xml = nil
437
+ subject.autorizados_download_xml.must_equal([])
438
+ subject.autorizados_download_xml = [nil]
439
+ subject.autorizados_download_xml.must_equal([])
440
+ end
441
+ end
442
+
443
+ describe '#emitente' do
444
+ it 'have one' do
445
+ must_have_one(:emitente,
446
+ BrNfe.emitente_product_class,
447
+ {nome_fantasia: 'FANTASIA', razao_social: 'RAZAO'},
448
+ null: false
449
+ )
450
+ end
451
+ it { must_validate_have_one(:emitente, BrNfe.emitente_product_class, :invalid_emitente) }
452
+ end
453
+
454
+ describe '#destinatario' do
455
+ it 'have one' do
456
+ must_have_one(:destinatario,
457
+ BrNfe.destinatario_product_class,
458
+ {nome_fantasia: 'FANTASIA', razao_social: 'RAZAO'},
459
+ null: false
460
+ )
461
+ end
462
+ it { must_validate_have_one(:destinatario, BrNfe.destinatario_product_class, :invalid_destinatario) }
463
+ end
464
+
465
+ describe '#transporte' do
466
+ it { must_have_one(:transporte,
467
+ BrNfe.transporte_product_class,
468
+ {retencao_cfop: 'LOG', retencao_valor_sevico: 50.55}
469
+ )}
470
+ it { must_validate_have_one(:transporte, BrNfe.transporte_product_class, :invalid_transporte) }
471
+ end
472
+
473
+ describe '#fatura' do
474
+ it { must_have_one(:fatura,
475
+ BrNfe.fatura_product_class,
476
+ {numero_fatura: 'LOG', valor_original: 50.55}
477
+ )}
478
+ it { must_validate_have_one(:fatura, BrNfe.fatura_product_class, :invalid_fatura) }
479
+ end
480
+
481
+ describe '#pagamentos' do
482
+ it { must_have_many(:pagamentos, BrNfe.pagamento_product_class, {forma_pagamento: '1', total: 350.00}) }
483
+ it { must_validate_length_has_many(:pagamentos,
484
+ BrNfe.pagamento_product_class,
485
+ condition: :nfce?
486
+ )}
487
+
488
+ it { must_validates_has_many(:pagamentos,
489
+ BrNfe.pagamento_product_class,
490
+ :invalid_pagamento,
491
+ condition: :nfce?
492
+ )}
493
+ end
494
+
495
+ describe '#itens' do
496
+ it { must_have_many(:itens, BrNfe.item_product_class, {codigo_produto: 'P123', codigo_ean: '123456'}) }
497
+ it { must_validate_length_has_many(:itens,
498
+ BrNfe.item_product_class,
499
+ minimum: 1
500
+ )}
501
+ it { must_validates_has_many(:itens, BrNfe.item_product_class, :invalid_item) }
502
+ end
503
+
504
+ describe '#has_any_service?' do
505
+ it "se tiver algum serviço entre os itens deve retornar true" do
506
+ subject.itens = [{tipo_produto: :product},{tipo_produto: :service},{tipo_produto: :product}]
507
+ subject.has_any_service?.must_equal true
508
+ end
509
+ it "se não tiver serviço entre os itens deve retornar false" do
510
+ subject.itens = [{tipo_produto: :product},{tipo_produto: :product}]
511
+ subject.has_any_service?.must_equal false
512
+ end
513
+ end
514
+ describe '#has_any_product?' do
515
+ it "se tiver algum serviço entre os itens deve retornar true" do
516
+ subject.itens = [{tipo_produto: :service},{tipo_produto: :product},{tipo_produto: :product}]
517
+ subject.has_any_product?.must_equal true
518
+ end
519
+ it "se não tiver serviço entre os itens deve retornar false" do
520
+ subject.itens = [{tipo_produto: :service},{tipo_produto: :service}]
521
+ subject.has_any_product?.must_equal false
522
+ end
523
+ end
524
+
525
+ describe '#has_taxes_retention?' do
526
+ before do
527
+ subject.assign_attributes(
528
+ total_retencao_pis: nil, total_retencao_cofins: nil,
529
+ total_retencao_csll: nil, total_retencao_irrf: nil,
530
+ total_retencao_previdencia: nil
531
+ )
532
+ end
533
+ it "deve retornar false se todos os valores de retenção estiverem nil" do
534
+ subject.has_taxes_retention?.must_equal false
535
+ end
536
+ it "deve retornar false se todos os valores de retenção estiverem zerados" do
537
+ subject.assign_attributes(
538
+ total_retencao_pis: 0.0, total_retencao_cofins: 0.0,
539
+ total_retencao_csll: 0.0, total_retencao_irrf: 0.0,
540
+ total_retencao_previdencia: 0.0
541
+ )
542
+ subject.has_taxes_retention?.must_equal false
543
+ end
544
+
545
+ it "deve retornar true se total_retencao_pis for maior que zero" do
546
+ subject.total_retencao_pis = 1.0
547
+ subject.has_taxes_retention?.must_equal true
548
+ end
549
+ it "deve retornar true se total_retencao_cofins for maior que zero" do
550
+ subject.total_retencao_cofins = 1.0
551
+ subject.has_taxes_retention?.must_equal true
552
+ end
553
+ it "deve retornar true se total_retencao_csll for maior que zero" do
554
+ subject.total_retencao_csll = 1.0
555
+ subject.has_taxes_retention?.must_equal true
556
+ end
557
+ it "deve retornar true se total_retencao_irrf for maior que zero" do
558
+ subject.total_retencao_irrf = 1.0
559
+ subject.has_taxes_retention?.must_equal true
560
+ end
561
+ it "deve retornar true se total_retencao_previdencia for maior que zero" do
562
+ subject.total_retencao_previdencia = 1.0
563
+ subject.has_taxes_retention?.must_equal true
564
+ end
565
+ end
566
+
567
+ describe '#processos_referenciados' do
568
+ it { must_have_many(:processos_referenciados, BrNfe.processo_referencia_product_class, {numero_processo: 'P123', indicador: 1}) }
569
+ it { must_validates_has_many(:processos_referenciados, BrNfe.processo_referencia_product_class, :invalid_processo) }
570
+ end
571
+
572
+ describe '#status' do
573
+ it 'Deve retornar :success se o status_code estiver entre os valores da constante NFE_STATUS_SUCCESS' do
574
+ BrNfe::Constants::NFE_STATUS_SUCCESS.each do |code|
575
+ subject.status_code = code
576
+ subject.status.must_equal :success
577
+ end
578
+ end
579
+ it 'Deve retornar :processing se o status_code estiver entre os valores da constante NFE_STATUS_PROCESSING' do
580
+ BrNfe::Constants::NFE_STATUS_PROCESSING.each do |code|
581
+ subject.status_code = code
582
+ subject.status.must_equal :processing
583
+ end
584
+ end
585
+ it 'Deve retornar :offline se o status_code estiver entre os valores da constante NFE_STATUS_OFFLINE' do
586
+ BrNfe::Constants::NFE_STATUS_OFFLINE.each do |code|
587
+ subject.status_code = code
588
+ subject.status.must_equal :offline
589
+ end
590
+ end
591
+ it 'Deve retornar :denied se o status_code estiver entre os valores da constante NFE_STATUS_DENIED' do
592
+ BrNfe::Constants::NFE_STATUS_DENIED.each do |code|
593
+ subject.status_code = code
594
+ subject.status.must_equal :denied
595
+ end
596
+ end
597
+ it "deve retornar o status :error para qualquer outro código que não esteja entre os códigos testados anteriormente" do
598
+ subject.status_code = '000'
599
+ subject.status.must_equal :error
600
+ subject.status_code = '1000'
601
+ subject.status.must_equal :error
602
+ end
603
+ it "se status_code não tiver valor deve retornar nil" do
604
+ subject.status_code = ''
605
+ subject.status.must_be_nil
606
+ subject.status_code = nil
607
+ subject.status.must_be_nil
608
+ end
609
+ end
610
+
611
+ describe '#situation' do
612
+ it "Se setar a situação manualmente, deve manter o valor" do
613
+ subject.situation = :manual
614
+ subject.situation.must_equal :manual
615
+ end
616
+ it "se não tiver uma situação setada manualmente deve buscar através do código do status" do
617
+ subject.expects(:get_situation_by_status_code).returns(:by_status)
618
+ subject.situation = nil
619
+ subject.situation.must_equal :by_status
620
+ end
621
+ end
622
+ describe '#get_situation_by_status_code' do
623
+ it "se o código do status estiver na constante NFE_SITUATION_AUTORIZED, deve retornar :authorized" do
624
+ BrNfe::Constants::NFE_SITUATION_AUTORIZED.each do |code|
625
+ subject.status_code = code
626
+ subject.get_situation_by_status_code.must_equal :authorized
627
+ end
628
+ end
629
+ it "se o código do status estiver na constante NFE_SITUATION_ADJUSTED, deve retornar :adjusted" do
630
+ BrNfe::Constants::NFE_SITUATION_ADJUSTED.each do |code|
631
+ subject.status_code = code
632
+ subject.get_situation_by_status_code.must_equal :adjusted
633
+ end
634
+ end
635
+ it "se o código do status estiver na constante NFE_SITUATION_CANCELED, deve retornar :canceled" do
636
+ BrNfe::Constants::NFE_SITUATION_CANCELED.each do |code|
637
+ subject.status_code = code
638
+ subject.get_situation_by_status_code.must_equal :canceled
639
+ end
640
+ end
641
+ it "se o código do status estiver na constante NFE_SITUATION_DENIED, deve retornar :denied" do
642
+ BrNfe::Constants::NFE_SITUATION_DENIED.each do |code|
643
+ subject.status_code = code
644
+ subject.get_situation_by_status_code.must_equal :denied
645
+ end
646
+ end
647
+ it "se o código do status estiver na constante NFE_SITUATION_DRAFT, deve retornar :draft" do
648
+ BrNfe::Constants::NFE_SITUATION_DRAFT.each do |code|
649
+ subject.status_code = code
650
+ subject.get_situation_by_status_code.must_equal :draft
651
+ end
652
+ end
653
+ it "Se o código do status estiver em branco deve retornar :draft" do
654
+ subject.status_code = ''
655
+ subject.get_situation_by_status_code.must_equal :draft
656
+ end
657
+ it "Se retornar qualquer outro código não mencionando deve retornar :rejected" do
658
+ subject.status_code = '354'
659
+ subject.get_situation_by_status_code.must_equal :rejected
660
+ end
661
+ end
662
+ end