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,381 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::Nfe::Item do
4
+ subject { FactoryGirl.build(:product_item) }
5
+
6
+ describe "Alias attributes" do
7
+ it { must_have_alias_attribute :cProd, :codigo_produto ,'1' }
8
+ it { must_have_alias_attribute :codigo_gtin, :codigo_ean ,'1' }
9
+ it { must_have_alias_attribute :cEAN, :codigo_ean ,'1' }
10
+ it { must_have_alias_attribute :xProd, :descricao_produto }
11
+ it { must_have_alias_attribute :NCM, :codigo_ncm, '1' }
12
+ it { must_have_alias_attribute :NVE, :codigos_nve, ['1'] }
13
+ it { must_have_alias_attribute :EXTIPI, :codigo_extipi }
14
+ it { must_have_alias_attribute :CFOP, :cfop, '' }
15
+ it { must_have_alias_attribute :uCom, :unidade_comercial }
16
+ it { must_have_alias_attribute :qCom, :quantidade_comercial }
17
+ it { must_have_alias_attribute :vUnCom, :valor_unitario_comercial }
18
+ it { must_have_alias_attribute :vProd, :valor_total_produto }
19
+ it { must_have_alias_attribute :codigo_gtin_tributavel, :codigo_ean_tributavel, '' }
20
+ it { must_have_alias_attribute :cEANTrib, :codigo_ean_tributavel, '1' }
21
+ it { must_have_alias_attribute :uTrib, :unidade_tributavel }
22
+ it { must_have_alias_attribute :qTrib, :quantidade_tributavel }
23
+ it { must_have_alias_attribute :vUnTrib, :valor_unitario_tributavel }
24
+ it { must_have_alias_attribute :vFrete, :total_frete }
25
+ it { must_have_alias_attribute :vSeg, :total_seguro }
26
+ it { must_have_alias_attribute :vDesc, :total_desconto }
27
+ it { must_have_alias_attribute :vOutro, :total_outros }
28
+ it { must_have_alias_attribute :indTot, :soma_total_nfe }
29
+ it { must_have_alias_attribute :CEST, :codigo_cest }
30
+ it { must_have_alias_attribute :DI, :declaracoes_importacao, [BrNfe.declaracao_importacao_product_class.new] }
31
+ it { must_have_alias_attribute :detExport, :detalhes_exportacao, [BrNfe.detalhe_exportacao_product_class.new] }
32
+ it { must_have_alias_attribute :xPed, :numero_pedido_compra }
33
+ it { must_have_alias_attribute :nItemPed, :item_pedido_compra, '1' }
34
+ it { must_have_alias_attribute :nFCI, :numero_fci }
35
+ it { must_have_alias_attribute :vTotTrib, :total_tributos }
36
+ it { must_have_alias_attribute :ICMS, :icms, BrNfe.icms_item_tax_product_class.new }
37
+ it { must_have_alias_attribute :IPI, :ipi, BrNfe.ipi_item_tax_product_class.new }
38
+ it { must_have_alias_attribute :II, :importacao, BrNfe.importacao_item_tax_product_class.new }
39
+ it { must_have_alias_attribute :PIS, :pis, BrNfe.pis_item_tax_product_class.new }
40
+ it { must_have_alias_attribute :PISST, :pis_st, BrNfe.pis_st_item_tax_product_class.new }
41
+ it { must_have_alias_attribute :COFINS, :cofins, BrNfe.cofins_item_tax_product_class.new }
42
+ it { must_have_alias_attribute :COFINSST, :cofins_st, BrNfe.cofins_st_item_tax_product_class.new }
43
+ it { must_have_alias_attribute :ISSQN, :issqn, BrNfe.issqn_item_tax_product_class.new }
44
+ it { must_have_alias_attribute :ICMSUFDest, :icms_uf_destino, BrNfe.icms_uf_destino_item_tax_product_class.new }
45
+ it { must_have_alias_attribute :infAdProd, :informacoes_adicionais }
46
+ end
47
+
48
+ describe 'Default values' do
49
+ it "for tipo_produto" do
50
+ subject.class.new.tipo_produto.must_equal :product
51
+ end
52
+ it "for soma_total_nfe" do
53
+ subject.class.new.soma_total_nfe.must_equal true
54
+ end
55
+ end
56
+
57
+ describe 'Validations' do
58
+ before do
59
+ MiniTest::Spec.string_for_validation_length = '1'
60
+ end
61
+ after do
62
+ MiniTest::Spec.string_for_validation_length = 'x'
63
+ end
64
+ it { must validate_numericality_of(:total_frete).allow_nil }
65
+ it { must validate_numericality_of(:total_seguro).allow_nil }
66
+ it { must validate_numericality_of(:total_desconto).allow_nil }
67
+ it { must validate_numericality_of(:total_outros).allow_nil }
68
+ it { must validate_length_of(:codigo_cest).is_at_most(7) }
69
+
70
+ it { must validate_length_of(:numero_pedido_compra).is_at_most(15) }
71
+ it { must allow_value('').for(:numero_pedido_compra) }
72
+
73
+ it { must validate_length_of(:item_pedido_compra).is_at_most(6) }
74
+ it { must allow_value('').for(:item_pedido_compra) }
75
+
76
+ it { must validate_length_of(:informacoes_adicionais).is_at_most(500) }
77
+
78
+ describe "numero_fci" do
79
+ it { must validate_length_of(:numero_fci).is_equal_to(36) }
80
+ it { must allow_value('').for(:numero_fci) }
81
+ it { must allow_value('B01F70AF-10BF-4B1F-848C-65FF57F616FE').for(:numero_fci) }
82
+ it { must allow_value('11111111-1111-1111-1111-999999999999').for(:numero_fci) }
83
+ it { must allow_value('ABCDEFAA-AAAA-AAAA-AAAA-FFFFFFFFFFFF').for(:numero_fci) }
84
+ it { must allow_value('ABCDEFAA1AAAA2AAAA0AAAA9FFFFFFFFFFFF').for(:numero_fci) }
85
+ # NÃO DEVE ACEITAR LETRAS A CIMA DE F
86
+ it { wont allow_value('ABCDEFGGGGAAA2AAAA0AAAA9FFFFFFFFFFFF').for(:numero_fci) }
87
+ it { wont allow_value('ABCDEFZZZZAAA2AAAA0AAAA9FFFFFFFFFFFF').for(:numero_fci) }
88
+ # NÃO DEVE ACEITAR LETRAS minúsculas
89
+ it { wont allow_value('abcdefaaaaaaa2aaaa0aaaa9ffffffffffff').for(:numero_fci) }
90
+ # NÃO DEVE ACEITAR caracteres especiais a não ser hífen
91
+ it { wont allow_value('ABCDEFAA@AAAA#AAAA$AAAA_FFFFFF,FFFFF').for(:numero_fci) }
92
+ end
93
+
94
+ describe "tipo_produto" do
95
+ it { must validate_presence_of(:tipo_produto) }
96
+ it { must validate_inclusion_of(:tipo_produto).in_array([:product, :service, :other]) }
97
+ end
98
+ describe "codigo_produto" do
99
+ it { must validate_length_of(:codigo_produto).is_at_most(60) }
100
+ end
101
+ describe "codigo_ean" do
102
+ it { must validate_length_of(:codigo_ean).is_at_most(14) }
103
+ end
104
+ describe "descricao_produto" do
105
+ it { must validate_length_of(:descricao_produto).is_at_most(120) }
106
+ end
107
+ describe "codigo_ncm" do
108
+ context "quando o tipo_produto for :product" do
109
+ before { subject.stubs(:is_product?).returns(true) }
110
+ it { must validate_length_of(:codigo_ncm).is_at_most(8) }
111
+ it { wont validate_length_of(:codigo_ncm).is_at_most(2) }
112
+ end
113
+ context "quando o tipo_produto não for :product" do
114
+ before { subject.stubs(:is_product?).returns(false) }
115
+ it { must validate_length_of(:codigo_ncm).is_at_most(2) }
116
+ it { wont validate_length_of(:codigo_ncm).is_at_most(8) }
117
+ end
118
+ end
119
+ describe "codigos_nve" do
120
+ it "Deve ter no máximo 8 códigos" do
121
+ MiniTest::Spec.string_for_validation_length = ['AA1324']
122
+ must validate_length_of(:codigos_nve).is_at_most(8)
123
+ MiniTest::Spec.string_for_validation_length = 'x'
124
+ end
125
+ end
126
+
127
+ describe 'codigo_extipi' do
128
+ it { must validate_length_of(:codigo_extipi).is_at_least(2).is_at_most(3) }
129
+ it "se não preencher o atributo não deve valida-lo" do
130
+ subject.codigo_extipi = ''
131
+ wont_be_message_error :codigo_extipi
132
+ end
133
+ end
134
+
135
+ describe 'unidade_comercial' do
136
+ it { must validate_presence_of(:unidade_comercial) }
137
+ it { must validate_length_of(:unidade_comercial).is_at_most(6) }
138
+ end
139
+ describe 'quantidade_comercial' do
140
+ it { must validate_presence_of(:quantidade_comercial) }
141
+ it { must validate_numericality_of(:quantidade_comercial) }
142
+ end
143
+ describe 'valor_unitario_comercial' do
144
+ before { subject.quantidade_comercial = 0 }
145
+ it { must validate_presence_of(:valor_unitario_comercial) }
146
+ it { must validate_numericality_of(:valor_unitario_comercial) }
147
+ end
148
+ describe 'valor_total_produto' do
149
+ it { must validate_presence_of(:valor_total_produto) }
150
+ it { must validate_numericality_of(:valor_total_produto) }
151
+ end
152
+ describe "codigo_ean_tributavel" do
153
+ it { must validate_length_of(:codigo_ean_tributavel).is_at_most(14) }
154
+ end
155
+ describe 'quantidade_tributavel' do
156
+ before { subject.quantidade_comercial = nil }
157
+ it { must validate_presence_of(:quantidade_tributavel) }
158
+ it { must validate_numericality_of(:quantidade_tributavel) }
159
+ end
160
+ describe 'unidade_tributavel' do
161
+ before { subject.unidade_comercial = nil }
162
+ it { must validate_presence_of(:unidade_tributavel) }
163
+ it { must validate_length_of(:unidade_tributavel).is_at_most(6) }
164
+ end
165
+ describe 'valor_unitario_tributavel' do
166
+ before { subject.quantidade_tributavel = 0 }
167
+ it { must validate_presence_of(:valor_unitario_tributavel) }
168
+ it { must validate_numericality_of(:valor_unitario_tributavel) }
169
+ end
170
+
171
+ it { must validate_numericality_of(:percentual_devolucao).
172
+ is_greater_than_or_equal_to(0.0).
173
+ is_less_than_or_equal_to(100.0).
174
+ allow_nil
175
+ }
176
+ end
177
+
178
+ describe "cfop" do
179
+ it "Só aceita números" do
180
+ must_accept_only_numbers :cfop
181
+ end
182
+ end
183
+
184
+ describe 'codigo_ean' do
185
+ it "Só aceita números" do
186
+ must_accept_only_numbers :codigo_ean
187
+ end
188
+ end
189
+
190
+ describe '#codigo_produto' do
191
+ it "deve retornar o valor da CFOP se não preenchero valor e tiver cfop" do
192
+ subject.cfop = 7896
193
+ subject.codigo_produto = ''
194
+ subject.codigo_produto.must_equal 'CFOP7896'
195
+ end
196
+ it "deve retornar vazio se não preenchero valor e cfop estiver sem preencher" do
197
+ subject.cfop = ''
198
+ subject.codigo_produto = ''
199
+ subject.codigo_produto.must_equal ''
200
+ end
201
+ it "deve retornar o valor setado mesmo que tiver cfop preenchido" do
202
+ subject.cfop = '7896'
203
+ subject.codigo_produto = 'PROD7844'
204
+ subject.codigo_produto.must_equal 'PROD7844'
205
+ end
206
+ end
207
+
208
+ describe '#codigo_ncm' do
209
+ it "Só aceita números" do
210
+ must_accept_only_numbers :codigo_ncm
211
+ end
212
+ it "se for um produto e não tiver valor não deve setar o valor 00" do
213
+ subject.tipo_produto = :product
214
+ subject.codigo_ncm = ''
215
+ subject.codigo_ncm.must_equal ''
216
+ end
217
+ it "se não for um produto e não tiver valor deve setar o valor 00" do
218
+ subject.tipo_produto = :service
219
+ subject.codigo_ncm = ''
220
+ subject.codigo_ncm.must_equal '00'
221
+ subject.tipo_produto = :other
222
+ subject.codigo_ncm = ''
223
+ subject.codigo_ncm.must_equal '00'
224
+ end
225
+ end
226
+
227
+ describe '#codigos_nve' do
228
+ it { must_returns_an_array :codigos_nve }
229
+ end
230
+
231
+ describe 'codigo_ean_tributavel' do
232
+ it "Só aceita números" do
233
+ must_accept_only_numbers :codigo_ean_tributavel
234
+ end
235
+ end
236
+
237
+ describe '#quantidade_tributavel' do
238
+ it "se a quantidade_tributavel for nil, deve considerar o valor de quantidade_comercial" do
239
+ subject.quantidade_tributavel = nil
240
+ subject.quantidade_comercial = 8
241
+ subject.quantidade_tributavel.must_equal 8
242
+ end
243
+ it "se tiver quantidade_tributavel não deve considerar o valor de quantidade_comercial" do
244
+ subject.quantidade_tributavel = 12
245
+ subject.quantidade_comercial = 8
246
+ subject.quantidade_tributavel.must_equal 12
247
+ end
248
+ end
249
+
250
+ describe '#unidade_tributavel' do
251
+ it "se a unidade_tributavel for nil, deve considerar o valor de unidade_comercial" do
252
+ subject.unidade_tributavel = nil
253
+ subject.unidade_comercial = 'PC'
254
+ subject.unidade_tributavel.must_equal 'PC'
255
+ end
256
+ it "se tiver unidade_tributavel não deve considerar o valor de unidade_comercial" do
257
+ subject.unidade_tributavel = 'KG'
258
+ subject.unidade_comercial = 'PC'
259
+ subject.unidade_tributavel.must_equal 'KG'
260
+ end
261
+ end
262
+
263
+ describe '#valor_unitario_comercial' do
264
+ before do
265
+ subject.valor_unitario_comercial = nil
266
+ subject.valor_total_produto = 500.00
267
+ subject.quantidade_comercial = 3.55
268
+ end
269
+ it "se não tiver valor setado deve calcular = valor_total_produto/quantidade_comercial" do
270
+ subject.valor_unitario_comercial.must_equal 140.8450704225
271
+ end
272
+ it "caso seja setado um valor no atributo não deve calcular" do
273
+ subject.valor_unitario_comercial = 140.0
274
+ subject.valor_unitario_comercial.must_equal 140.0
275
+ end
276
+ it "não deve calcular se a quantidade_comercial for nil ou zero" do
277
+ subject.quantidade_comercial = nil
278
+ subject.valor_unitario_comercial.must_be_nil
279
+ subject.quantidade_comercial = 0
280
+ subject.valor_unitario_comercial.must_be_nil
281
+ subject.quantidade_comercial = 1
282
+ subject.valor_unitario_comercial.wont_be_nil
283
+ end
284
+ end
285
+ describe '#valor_unitario_tributavel' do
286
+ before do
287
+ subject.valor_unitario_comercial = nil
288
+ subject.quantidade_comercial = nil
289
+
290
+ subject.valor_unitario_tributavel = nil
291
+ subject.valor_total_produto = 600.00
292
+ subject.quantidade_tributavel = 3.55
293
+ end
294
+ it "se não tiver valor setado deve calcular = valor_total_produto/quantidade_tributavel" do
295
+ subject.valor_unitario_tributavel.must_equal 169.014084507
296
+ end
297
+ it "caso seja setado um valor no atributo não deve calcular" do
298
+ subject.valor_unitario_tributavel = 140.0
299
+ subject.valor_unitario_tributavel.must_equal 140.0
300
+ end
301
+ it "não deve calcular se a quantidade_tributavel for nil ou zero" do
302
+ subject.quantidade_tributavel = nil
303
+ subject.valor_unitario_tributavel.must_be_nil
304
+ subject.quantidade_tributavel = 0
305
+ subject.valor_unitario_tributavel.must_be_nil
306
+ subject.quantidade_tributavel = 1
307
+ subject.valor_unitario_tributavel.wont_be_nil
308
+ end
309
+ end
310
+
311
+ describe '#declaracoes_importacao' do
312
+ it { must_validate_length_has_many(:declaracoes_importacao, BrNfe.declaracao_importacao_product_class, {maximum: 100}) }
313
+ it { must_validates_has_many(:declaracoes_importacao, BrNfe.declaracao_importacao_product_class, :invalid_declaracao_importacao) }
314
+ it { must_have_many(:declaracoes_importacao, BrNfe.declaracao_importacao_product_class, {numero_documento: 'XXL9999', local_desembaraco: '223'}) }
315
+ end
316
+ describe '#detalhes_exportacao' do
317
+ it { must_have_many(:detalhes_exportacao, BrNfe.detalhe_exportacao_product_class, {numero_drawback: '46464', numero_registro: '223'}) }
318
+ it { must_validates_has_many(:detalhes_exportacao, BrNfe.detalhe_exportacao_product_class, :invalid_detalhe_exportacao) }
319
+ end
320
+ describe '#icms' do
321
+ it { must_have_one :icms, BrNfe.icms_item_tax_product_class, {origem: 0, codigo_cst: '10'}, null: false }
322
+
323
+ it 'Se o item for um produto deve validar o ICMS' do
324
+ subject.tipo_produto = :product
325
+ must_validate_have_one :icms, BrNfe.icms_item_tax_product_class, :invalid_icms
326
+ end
327
+ it 'Se o item for um serviço não deve validar o ICMS' do
328
+ subject.tipo_produto = :service
329
+ wont_validate_have_one :icms, BrNfe.icms_item_tax_product_class, :invalid_icms
330
+ end
331
+ end
332
+
333
+ describe '#ipi' do
334
+ it { must_have_one :ipi, BrNfe.ipi_item_tax_product_class, {codigo_cst: '01', codigo_selo: 'X10'} }
335
+ it { must_validate_have_one :ipi, BrNfe.ipi_item_tax_product_class, :invalid_ipi }
336
+ end
337
+
338
+ describe '#importacao' do
339
+ it { must_have_one :importacao, BrNfe.importacao_item_tax_product_class, {total_imposto: 10.0, total_iof: 20.0} }
340
+ it { must_validate_have_one :importacao, BrNfe.importacao_item_tax_product_class, :invalid_importacao }
341
+ end
342
+
343
+ describe '#pis' do
344
+ it { must_have_one :pis, BrNfe.pis_item_tax_product_class, {codigo_cst: '01', aliquota: 2.5}, null: false }
345
+ it { must_validate_have_one :pis, BrNfe.pis_item_tax_product_class, :invalid_pis }
346
+ end
347
+
348
+ describe '#pis_st' do
349
+ it { must_have_one :pis_st, BrNfe.pis_st_item_tax_product_class, {aliquota: 1.4, total: 14.0} }
350
+ it { must_validate_have_one :pis_st, BrNfe.pis_st_item_tax_product_class, :invalid_pis_st }
351
+ end
352
+
353
+ describe '#cofins' do
354
+ it { must_have_one :cofins, BrNfe.cofins_item_tax_product_class, {codigo_cst: '01', aliquota: 4.56}, null: false }
355
+ it { must_validate_have_one :cofins, BrNfe.cofins_item_tax_product_class, :invalid_cofins }
356
+ end
357
+
358
+ describe '#cofins_st' do
359
+ it { must_have_one :cofins_st, BrNfe.cofins_st_item_tax_product_class, {aliquota: 4.1, total: 20.00} }
360
+ it { must_validate_have_one :cofins_st, BrNfe.cofins_st_item_tax_product_class, :invalid_cofins_st }
361
+ end
362
+
363
+ describe '#issqn' do
364
+ it { must_have_one :issqn, BrNfe.issqn_item_tax_product_class, {aliquota: 2.5, total: 25.0} }
365
+ it { must_validate_have_one :issqn, BrNfe.issqn_item_tax_product_class, :invalid_issqn }
366
+ it "deve ser obrigatório se o tipo_produto for :service" do
367
+ subject.tipo_produto = :service
368
+ must validate_presence_of(:issqn)
369
+ end
370
+ it "Não deve ser obrigatório se o tipo_produto não for :service" do
371
+ subject.tipo_produto = :product
372
+ wont validate_presence_of(:issqn)
373
+ end
374
+ end
375
+
376
+ describe '#icms_uf_destino' do
377
+ it { must_have_one :icms_uf_destino, BrNfe.icms_uf_destino_item_tax_product_class, {total_destino: 15.0, total_origem: 14.0} }
378
+ it { must_validate_have_one :icms_uf_destino, BrNfe.icms_uf_destino_item_tax_product_class, :invalid_icms_uf_destino }
379
+ end
380
+
381
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::Nfe::ProcessoReferencia do
4
+ subject { FactoryGirl.build(:product_nfe_processo_referencia) }
5
+
6
+ describe "Alias attributes" do
7
+ it { must_have_alias_attribute :nProc, :numero_processo }
8
+ it { must_have_alias_attribute :indProc, :indicador, 1 }
9
+ end
10
+
11
+ describe 'Validações' do
12
+ it { must validate_presence_of(:numero_processo) }
13
+ it { must validate_inclusion_of(:indicador).in_array([0,1,2,3,9]) }
14
+ end
15
+
16
+ describe '#indicador' do
17
+ it "deve sempre retornar um inteiro" do
18
+ subject.indicador = '0'
19
+ subject.indicador.must_equal 0
20
+ subject.indicador = '1'
21
+ subject.indicador.must_equal 1
22
+ subject.indicador = '2'
23
+ subject.indicador.must_equal 2
24
+ subject.indicador = '3'
25
+ subject.indicador.must_equal 3
26
+ subject.indicador = '09'
27
+ subject.indicador.must_equal 9
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,182 @@
1
+ require 'test_helper'
2
+
3
+ # Validações para quando não há transporte
4
+ module ValidationsWhenNotHasCarriage
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ before { subject.stubs(:have_carriage?).returns(false) }
8
+ it { wont validate_presence_of(:veiculo) }
9
+ it { wont_validate_have_one :veiculo, BrNfe.veiculo_product_class, :invalid_veiculo }
10
+ it { wont validate_presence_of(:identificacao_balsa) }
11
+ it { wont validate_presence_of(:identificacao_vagao) }
12
+ end
13
+ end
14
+
15
+ describe BrNfe::Product::Nfe::Transporte::Base do
16
+ subject { FactoryGirl.build(:product_transporte_base) }
17
+ let(:veiculo) { FactoryGirl.build(:product_transporte_veiculo) }
18
+ let(:volume) { FactoryGirl.build(:product_transporte_volume) }
19
+
20
+ describe "Alias attributes" do
21
+ it { must_have_alias_attribute :modFrete, :modalidade_frete }
22
+ it { must_have_alias_attribute :vServ, :retencao_valor_sevico }
23
+ it { must_have_alias_attribute :vBCRet, :retencao_base_calculo_icms }
24
+ it { must_have_alias_attribute :pICMSRet, :retencao_aliquota }
25
+ it { must_have_alias_attribute :vICMSRet, :retencao_valor_icms }
26
+ it { must_have_alias_attribute :CFOP, :retencao_cfop }
27
+ it { must_have_alias_attribute :cMunFG, :retencao_codigo_municipio }
28
+ it { must_have_alias_attribute :veicTransp, :veiculo, BrNfe.veiculo_product_class.new }
29
+ it { must_have_alias_attribute :balsa, :identificacao_balsa }
30
+ it { must_have_alias_attribute :vagao, :identificacao_vagao }
31
+ it { must_have_alias_attribute :vol, :volumes, [BrNfe.volume_transporte_product_class.new] }
32
+ it { must_have_alias_attribute :transporta, :transportador, BrNfe.transportador_product_class.new }
33
+ end
34
+
35
+ describe "#default_values" do
36
+ it '#modalidade_frete deve ter o padrão 9' do
37
+ subject.class.new.modalidade_frete.must_equal 9
38
+ end
39
+ it '#forma_transporte deve ter o padrão :veiculo' do
40
+ subject.class.new.forma_transporte.must_equal :veiculo
41
+ end
42
+ end
43
+
44
+ describe '#Validations' do
45
+ it { must validate_inclusion_of(:modalidade_frete).in_array([0, '0', 1, '1', 2, '2', 9, '9']) }
46
+ it { must validate_inclusion_of(:forma_transporte).in_array([:veiculo, :balsa, :vagao]) }
47
+ it { must validate_presence_of(:forma_transporte) }
48
+
49
+ describe 'Reteção de ICMS' do
50
+ context "quando retencao_icms? for true" do
51
+ before { subject.stubs(:retencao_icms?).returns(true) }
52
+ it { must validate_presence_of(:retencao_codigo_municipio) }
53
+ it { must validate_presence_of(:retencao_cfop) }
54
+ it { must validate_numericality_of(:retencao_base_calculo_icms).allow_nil }
55
+ it { must validate_numericality_of(:retencao_aliquota).is_less_than(100).allow_nil }
56
+ it { must validate_numericality_of(:retencao_valor_icms).allow_nil }
57
+ end
58
+ context "quando retencao_icms? for false" do
59
+ before { subject.stubs(:retencao_icms?).returns(false) }
60
+ it { wont validate_presence_of(:retencao_codigo_municipio) }
61
+ it { wont validate_presence_of(:retencao_cfop) }
62
+ it { wont validate_numericality_of(:retencao_base_calculo_icms) }
63
+ it { wont validate_numericality_of(:retencao_aliquota) }
64
+ it { wont validate_numericality_of(:retencao_valor_icms) }
65
+ end
66
+ end
67
+ end
68
+
69
+ describe '#retencao_icms? method' do
70
+ it "deve retornar true se o valor setado em retencao_valor_sevico for maior que zero" do
71
+ subject.retencao_valor_sevico = 0.1
72
+ subject.retencao_icms?.must_equal true
73
+
74
+ subject.retencao_valor_sevico = 20
75
+ subject.retencao_icms?.must_equal true
76
+ end
77
+
78
+ it "deve retornar false se o valor setado em retencao_valor_sevico for nil, zero ou menor" do
79
+ subject.retencao_valor_sevico = nil
80
+ subject.retencao_icms?.must_equal false
81
+
82
+ subject.retencao_valor_sevico = 0.0
83
+ subject.retencao_icms?.must_equal false
84
+
85
+ subject.retencao_valor_sevico = -1
86
+ subject.retencao_icms?.must_equal false
87
+ end
88
+ end
89
+
90
+ describe 'Quando a forma_transporte for :veiculo' do
91
+ before { subject.forma_transporte = :veiculo }
92
+ it { must_have_one(:veiculo,
93
+ BrNfe.veiculo_product_class,
94
+ {placa: 'LOG', rntc: 'NR', uf: "SP"}
95
+ )}
96
+ context "e houver frete" do
97
+ before { subject.stubs(:have_carriage?).returns(true) }
98
+ it { must validate_presence_of(:veiculo) }
99
+ it { must_validate_have_one :veiculo, BrNfe.veiculo_product_class, :invalid_veiculo }
100
+ it { wont validate_presence_of(:identificacao_balsa) }
101
+ it { wont validate_presence_of(:identificacao_vagao) }
102
+ end
103
+ context "e não houver frete" do
104
+ include ValidationsWhenNotHasCarriage
105
+ end
106
+ end
107
+
108
+ describe 'Quando a forma_transporte for :balsa' do
109
+ before { subject.forma_transporte = :balsa }
110
+ context "e houver frete" do
111
+ before { subject.stubs(:have_carriage?).returns(true) }
112
+ it { must validate_presence_of(:identificacao_balsa) }
113
+ it { wont validate_presence_of(:veiculo) }
114
+ it { wont validate_presence_of(:identificacao_vagao) }
115
+ it { wont_validate_have_one :veiculo, BrNfe.veiculo_product_class, :invalid_veiculo }
116
+ end
117
+ context "e não houver frete" do
118
+ include ValidationsWhenNotHasCarriage
119
+ end
120
+ end
121
+
122
+ describe 'Quando a forma_transporte for :vagao' do
123
+ before { subject.forma_transporte = :vagao }
124
+ context "e houver frete" do
125
+ before { subject.stubs(:have_carriage?).returns(true) }
126
+ it { must validate_presence_of(:identificacao_vagao) }
127
+ it { wont validate_presence_of(:identificacao_balsa) }
128
+ it { wont validate_presence_of(:veiculo) }
129
+ it { wont_validate_have_one :veiculo, BrNfe.veiculo_product_class, :invalid_veiculo }
130
+ end
131
+ context "e não houver frete" do
132
+ include ValidationsWhenNotHasCarriage
133
+ end
134
+ end
135
+
136
+ describe '#reboques' do
137
+ it { must_validate_length_has_many(:reboques, BrNfe.veiculo_product_class, {maximum: 5}) }
138
+ it { must_validates_has_many(:reboques, BrNfe.veiculo_product_class, :invalid_reboque) }
139
+ it { must_have_many(:reboques, BrNfe.veiculo_product_class, {placa: 'XXL9999', rntc: '223'}) }
140
+ end
141
+
142
+ describe '#volumes' do
143
+ it { must_validates_has_many(:volumes, BrNfe.volume_transporte_product_class, :invalid_volume) }
144
+ it { must_have_many(:volumes, BrNfe.volume_transporte_product_class, {marca: 'QUIPO', quantidade: 223}) }
145
+ end
146
+
147
+ describe '#CÁLCULOS AUTOMÁTICOS' do
148
+ describe '#retencao_valor_icms' do
149
+ it "deve calcular o valor a partir dos atributos 'retencao_base_calculo_icms' e 'retencao_aliquota' se estiver nil " do
150
+ subject.retencao_valor_icms = nil
151
+
152
+ subject.assign_attributes(retencao_base_calculo_icms: 150.0, retencao_aliquota: 5.5)
153
+ subject.retencao_valor_icms.must_equal 8.25
154
+
155
+ subject.assign_attributes(retencao_base_calculo_icms: 1_000.0, retencao_aliquota: 10)
156
+ subject.retencao_valor_icms.must_equal 100.0
157
+
158
+ subject.assign_attributes(retencao_base_calculo_icms: nil, retencao_aliquota: nil)
159
+ subject.retencao_valor_icms.must_equal 0.0
160
+ end
161
+
162
+ it "deve manter o valor setado manualmente mesmo que o calculo entre os atributos 'retencao_base_calculo_icms' e 'retencao_aliquota' sejam diferentes" do
163
+ subject.retencao_valor_icms = 57.88
164
+
165
+ subject.assign_attributes(retencao_base_calculo_icms: 150.0, retencao_aliquota: 5.5)
166
+ subject.retencao_valor_icms.must_equal 57.88
167
+
168
+ subject.assign_attributes(retencao_base_calculo_icms: 1_000.0, retencao_aliquota: 10)
169
+ subject.retencao_valor_icms.must_equal 57.88
170
+ end
171
+ end
172
+ end
173
+
174
+ describe '#transportador' do
175
+ it { must_have_one(:transportador,
176
+ BrNfe.transportador_product_class,
177
+ {nome_fantasia: 'LOG', razao_social: 'NR', endereco_uf: "SP"}
178
+ )}
179
+ it { must_validate_have_one(:transportador, BrNfe.transportador_product_class, :invalid_transportador) }
180
+ end
181
+ end
182
+
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::Nfe::Transporte::Transportador do
4
+ subject { FactoryGirl.build(:product_transporte_transportador) }
5
+
6
+ it "deve herdar de Person" do
7
+ subject.class.superclass.must_equal BrNfe::Person
8
+ end
9
+
10
+ it "deve estar setado que a validação do regime triburio para que não seja validado" do
11
+ subject.send(:validate_regime_tributario?).must_equal false
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::Nfe::Transporte::Veiculo do
4
+ subject { FactoryGirl.build(:product_transporte_veiculo) }
5
+
6
+ describe "#validations" do
7
+ it { must validate_presence_of(:placa) }
8
+ it { must validate_presence_of(:uf) }
9
+ it { must validate_inclusion_of(:uf).in_array(BrNfe::Constants::SIGLAS_UF) }
10
+ it { must validate_length_of(:rntc).is_at_most(20) }
11
+ it { must validate_length_of(:placa).is_equal_to(7) }
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ describe BrNfe::Product::Nfe::Transporte::Volume do
4
+ subject { FactoryGirl.build(:product_transporte_volume) }
5
+
6
+ describe "Alias attributes" do
7
+ it { must_have_alias_attribute :qVol, :quantidade }
8
+ it { must_have_alias_attribute :esp, :especie }
9
+ it { must_have_alias_attribute :nVol, :numercao }
10
+ it { must_have_alias_attribute :pesoL, :peso_liquido }
11
+ it { must_have_alias_attribute :pesoB, :peso_bruto }
12
+ end
13
+
14
+ describe "#validations" do
15
+ it "Pode haver no máximi 5000 lacres" do
16
+ MiniTest::Spec.string_for_validation_length = ['x']
17
+ must validate_length_of(:lacres).is_at_most(5_000)
18
+ MiniTest::Spec.string_for_validation_length = 'x'
19
+ end
20
+ it { must validate_length_of(:especie).is_at_most(60) }
21
+ it { must validate_length_of(:marca).is_at_most(60) }
22
+ it { must validate_length_of(:numercao).is_at_most(60) }
23
+ end
24
+
25
+ describe '#lacres' do
26
+ it "ao instanciar o obejto já deve retornar um array" do
27
+ subject.class.new.lacres.must_be_kind_of Array
28
+ subject.lacres = nil
29
+ subject.class.new.lacres.must_be_kind_of Array
30
+ end
31
+ it "se setar um valor diretamente deve converter em array" do
32
+ subject.lacres = '123'
33
+ subject.lacres.must_equal ['123']
34
+ end
35
+ it "Posso utilizar o operador << para adiiconar valores" do
36
+ subject.lacres << 'v1'
37
+ subject.lacres.must_equal(['v1'])
38
+ subject.lacres << 2
39
+ subject.lacres.must_equal(['v1',2])
40
+ end
41
+ end
42
+ end