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,678 @@
1
+ module BrNfe
2
+ module Product
3
+ module Nfe
4
+ class Item < BrNfe::ActiveModelBase
5
+ ################################################################################
6
+ ############################ INFORMAÇÕES DO PRODUTO ############################
7
+ # Utilizado apenas para fins de validação.
8
+ # informa se o item da NF-e é um produto ou um serviço.
9
+ #
10
+ # <b>Type: </b> _Symbol_
11
+ # <b>Required: </b> _Yes_
12
+ # <b>Default: </b> _:product_
13
+ # <b>Example: </b> _:service_
14
+ # <b>Avaliable: </b> _one of [:product, :service, :other]_
15
+ #
16
+ attr_accessor :tipo_produto
17
+
18
+ # Código do produto ou serviço
19
+ # Preencher com CFOP, caso se trate de itens não relacionados
20
+ # com mercadorias/produtos e que o contribuinte não possua
21
+ # codificação própria. Formato: ”CFOP9999”
22
+ #
23
+ # OBS: Caso não seja preenchido irá pegar automaticamente o valor
24
+ # da CFOP.
25
+ #
26
+ # <b>Type: </b> _String_
27
+ # <b>Required: </b> _Yes_
28
+ # <b>Default: </b> _CFOP#{cfop}_
29
+ # <b>Example: </b> _COD65452_
30
+ # <b>Length: </b> _max: 60_
31
+ # <b>tag: </b> cProd
32
+ #
33
+ attr_accessor :codigo_produto
34
+ def codigo_produto
35
+ @codigo_produto = "CFOP#{cfop}" if @codigo_produto.blank? && cfop.present?
36
+ "#{@codigo_produto}"
37
+ end
38
+ alias_attribute :cProd, :codigo_produto
39
+
40
+ # GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras
41
+ # Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou GTIN-14
42
+ # (antigos códigos EAN, UPC e DUN-14), não informar o conteúdo da TAG
43
+ # em caso de o produto não possuir este código.
44
+ #
45
+ # OBS: esse atributo sempre vai retornar apenas os números setados
46
+ #
47
+ # <b>Type: </b> _Number_
48
+ # <b>Required: </b> _No_
49
+ # <b>Example: </b> _12345678_
50
+ # <b>Length: </b> _max: 14_
51
+ # <b>tag: </b> cEAN
52
+ #
53
+ attr_accessor :codigo_ean
54
+ alias_attribute :codigo_gtin, :codigo_ean
55
+ alias_attribute :cEAN, :codigo_ean
56
+ def codigo_ean
57
+ "#{@codigo_ean}".gsub(/[^\d]/,'')
58
+ end
59
+
60
+ # Descrição do produto ou serviço
61
+ #
62
+ # <b>Type: </b> _String_
63
+ # <b>Required: </b> _Yes_
64
+ # <b>Example: </b> _COPO DE PLÁSTICO 700 ML PARATA_
65
+ # <b>Length: </b> _max: 120_
66
+ # <b>tag: </b> xProd
67
+ #
68
+ attr_accessor :descricao_produto
69
+ alias_attribute :xProd, :descricao_produto
70
+
71
+ # Código NCM com 8 dígitos
72
+ # Obrigatória informação do NCM completo (8 dígitos).
73
+ # Nota: Em caso de item de serviço ou item que não tenham
74
+ # produto (ex. transferência de crédito, crédito do ativo
75
+ # imobilizado, etc.), informar o valor 00 (dois zeros).
76
+ # (NT 2014/004)
77
+ #
78
+ # OBS: esse atributo sempre vai retornar apenas os números
79
+ #
80
+ # <b>Type: </b> _Number_
81
+ # <b>Required: </b> _Yes_
82
+ # <b>Example: </b> _'12345678'_ OR _123454_
83
+ # <b>Length: </b> _max: 8(:product) OR max: 2(not :product)_
84
+ # <b>tag: </b> NCM
85
+ #
86
+ attr_accessor :codigo_ncm
87
+ def codigo_ncm
88
+ if not is_product?
89
+ @codigo_ncm = '00' if @codigo_ncm.blank?
90
+ end
91
+ "#{@codigo_ncm}".gsub(/[^\d]/,'')
92
+ end
93
+ alias_attribute :NCM, :codigo_ncm
94
+
95
+ # Codificação NVE - Nomenclatura de Valor Aduaneiro e Estatística.
96
+ # Codificação opcional que detalha alguns NCM.
97
+ # Formato: duas letras maiúsculas e 4 algarismos. Se a
98
+ # mercadoria se enquadrar em mais de uma codificação, informar
99
+ # até 8 codificações principais. Vide: Anexo XII.03 - Identificador NVE.
100
+ #
101
+ # <b>Type: </b> _Array_
102
+ # <b>Required: </b> _No_
103
+ # <b>Example: </b> _['AB12324','AB5678'] OU 'AB4567'_
104
+ # <b>Length: </b> _max: 8_
105
+ #
106
+ # <b>tag: </b> NVE
107
+ attr_accessor :codigos_nve
108
+ def codigos_nve
109
+ @codigos_nve = [@codigos_nve] unless @codigos_nve.is_a?(Array)
110
+ @codigos_nve.flatten!
111
+ @codigos_nve.compact!
112
+ @codigos_nve
113
+ end
114
+ alias_attribute :NVE, :codigos_nve
115
+
116
+ # Código da Tabela de Incidência do IPI - TIPI
117
+ # Preencher de acordo com o código EX da TIPI. Em caso de
118
+ # serviço, não incluir a TAG.
119
+ #
120
+ # <b>Type: </b> _String_
121
+ # <b>Required: </b> _No_
122
+ # <b>Example: </b> _123_
123
+ # <b>Length: </b> _min: 2, max: 3_
124
+ # <b>tag: </b> EXTIPI
125
+ #
126
+ attr_accessor :codigo_extipi
127
+ alias_attribute :EXTIPI, :codigo_extipi
128
+
129
+ # Código Fiscal de Operações e Prestações
130
+ # Utilizar a Tabela de CFOPs para preencher essa informação.
131
+ #
132
+ # OBS: esse atributo sempre vai retornar apenas os números
133
+ # EX: Se preencher com '5.102' vai retornar '5102'
134
+ #
135
+ # <b>Type: </b> _String_ OR _Number_
136
+ # <b>Required: </b> _Yes_
137
+ # <b>Example: </b> _'5.102'_ OR _5102_
138
+ # <b>Length: </b> _4_
139
+ # <b>tag: </b> CFOP
140
+ #
141
+ attr_accessor :cfop
142
+ def cfop
143
+ "#{@cfop}".gsub(/[^\d]/,'')
144
+ end
145
+ alias_attribute :CFOP, :cfop
146
+
147
+ # Unidade Comercial
148
+ # informar a unidade de comercialização do produto
149
+ # (Ex. pc, und, dz, kg, etc.).
150
+ #
151
+ # <b>Type: </b> _String_
152
+ # <b>Required: </b> _Yes_
153
+ # <b>Example: </b> _KG_
154
+ # <b>Length: </b> _max: 6_
155
+ # <b>tag: </b> uCom
156
+ #
157
+ attr_accessor :unidade_comercial
158
+ alias_attribute :uCom, :unidade_comercial
159
+
160
+ # Quantidade Comercial
161
+ # Informar a quantidade de comercialização do produto (v2.0).
162
+ #
163
+ # <b>Type: </b> _Float_
164
+ # <b>Required: </b> _Yes_
165
+ # <b>Example: </b> _2.5_
166
+ # <b>tag: </b> qCom
167
+ #
168
+ attr_accessor :quantidade_comercial
169
+ alias_attribute :qCom, :quantidade_comercial
170
+
171
+ # Valor Unitário de Comercialização
172
+ # Informar o valor unitário de comercialização do produto, campo
173
+ # meramente informativo, o contribuinte pode utilizar a precisão
174
+ # desejada (0-10 decimais). Para efeitos de cálculo, o valor
175
+ # unitário será obtido pela divisão do valor do produto pela
176
+ # quantidade comercial. (v2.0)
177
+ #
178
+ # <b>Type: </b> _Number_
179
+ # <b>Required: </b> _Yes_
180
+ # <b>Example: </b> _22.5_ OU _2_
181
+ # <b>tag: </b> vUnCom
182
+ #
183
+ attr_accessor :valor_unitario_comercial
184
+ def valor_unitario_comercial
185
+ @valor_unitario_comercial ||= valor_unitario_comercial_calculation
186
+ @valor_unitario_comercial
187
+ end
188
+ alias_attribute :vUnCom, :valor_unitario_comercial
189
+
190
+ # Valor Total Bruto dos Produtos ou Serviços
191
+ #
192
+ # <b>Type: </b> _Float_
193
+ # <b>Required: </b> _Yes_
194
+ # <b>Example: </b> _3122.55_ OU _100_
195
+ # <b>tag: </b> vProd
196
+ #
197
+ attr_accessor :valor_total_produto
198
+ alias_attribute :vProd, :valor_total_produto
199
+
200
+ # GTIN (Global Trade Item Number) da unidade tributável,
201
+ # antigo código EAN ou código de barras
202
+ # Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou GTIN-14
203
+ # (antigos códigos EAN, UPC e DUN-14) da unidade tributável
204
+ # do produto, não informar o conteúdo da TAG em caso de o
205
+ # produto não possuir este código.
206
+ #
207
+ # OBS: esse atributo sempre vai retornar apenas os números setados
208
+ #
209
+ # <b>Type: </b> _Number_
210
+ # <b>Required: </b> _No_
211
+ # <b>Example: </b> _12345678_
212
+ # <b>Length: </b> _max: 14_
213
+ # <b>tag: </b> cEANTrib
214
+ #
215
+ attr_accessor :codigo_ean_tributavel
216
+ alias_attribute :codigo_gtin_tributavel, :codigo_ean_tributavel
217
+ def codigo_ean_tributavel
218
+ "#{@codigo_ean_tributavel}".gsub(/[^\d]/,'')
219
+ end
220
+ alias_attribute :cEANTrib, :codigo_ean_tributavel
221
+
222
+ # Unidade Tributável
223
+ # Informar a unidade de tributação do produto
224
+ # (Ex. pc, und, dz, kg, etc.).
225
+ #
226
+ # <b>Type: </b> _String_
227
+ # <b>Required: </b> _Yes_
228
+ # <b>Example: </b> _KG_
229
+ # <b>Length: </b> _max: 6_
230
+ # <b>tag: </b> uTrib
231
+ #
232
+ attr_accessor :unidade_tributavel
233
+ def unidade_tributavel
234
+ @unidade_tributavel ||= unidade_comercial
235
+ end
236
+ alias_attribute :uTrib, :unidade_tributavel
237
+
238
+ # Quantidade Tributável
239
+ # Informar a quantidade de tributação do produto (v2.0).
240
+ #
241
+ # NOTA: Por termos diversos casos na legislação onde a tributação
242
+ # incide em unidades de produtos diferentes da que ele é costumeiramente
243
+ # vendido no mercado, especialmente no atacado. Ou seja, a unidade tributa
244
+ # é diferente da unidade comercializada, por este motivo é que foram criados
245
+ # os respectivos campos na NF-e (uCom, qCom e vCom) (uTrib, qTrib e vUnTrib),
246
+ # sendo que o resultado (qCom * uCom) seja igual a (qTrib * uTrib).
247
+ # Tomemos como exemplo o refrigerante pet de 2 litros que tem
248
+ # definido na pauta fiscal a “unidade tributável” como garrafa de 2litros,
249
+ # sendo que o fabricante comercializa o mesmo produto em pacote com 6 unidades.
250
+ # Assim na venda de 2 pacotes, temos como unidade comercial de 2 unidades
251
+ # que equivalem a 12 litros (2 x 6), com 2 litros cada.
252
+ # Na unidade tributável, temos também 12 unidades tributáveis (12 x 1 unidade de 2 litros).
253
+ # Observem que sempre qCom * uCom = qTrib * uTrib.
254
+ # É importante ressaltar que na maioria dos casos a unidade comercial e a
255
+ # unidade tributável são iguais.
256
+ # Fonte: http://www.tecnospeed.com.br/forum/o-contador/motivo-da-rejeicao-nos-campos-unidade-tributave-e-unidade-comercial/
257
+ #
258
+ # <b>Type: </b> _Float_
259
+ # <b>Required: </b> _Yes_
260
+ # <b>Example: </b> _2.5_
261
+ # <b>tag: </b> qTrib
262
+ #
263
+ attr_accessor :quantidade_tributavel
264
+ def quantidade_tributavel
265
+ @quantidade_tributavel ||= quantidade_comercial
266
+ end
267
+ alias_attribute :qTrib, :quantidade_tributavel
268
+
269
+ # Valor Unitário de tributação
270
+ # Informar o valor unitário de tributação do produto, campo
271
+ # meramente informativo, o contribuinte pode utilizar a precisão
272
+ # desejada (0-10 decimais). Para efeitos de cálculo, o valor
273
+ # unitário será obtido pela divisão do valor do produto pela
274
+ # quantidade tributável (NT 2013/003).
275
+ #
276
+ # <b>Type: </b> _Number_
277
+ # <b>Required: </b> _Yes_
278
+ # <b>Example: </b> _22.5_ OU _2_
279
+ # <b>tag: </b> vUnTrib
280
+ #
281
+ attr_accessor :valor_unitario_tributavel
282
+ def valor_unitario_tributavel
283
+ @valor_unitario_tributavel ||= valor_unitario_tributavel_calculation
284
+ @valor_unitario_tributavel
285
+ end
286
+ alias_attribute :vUnTrib, :valor_unitario_tributavel
287
+
288
+ # Valor Total do Frete
289
+ #
290
+ # <b>Type: </b> _Number_
291
+ # <b>Required: </b> _No_
292
+ # <b>Example: </b> _22.5_ OU _2_
293
+ # <b>tag: </b> vFrete
294
+ #
295
+ attr_accessor :total_frete
296
+ alias_attribute :vFrete, :total_frete
297
+
298
+ # Valor Total do Seguro
299
+ #
300
+ # <b>Type: </b> _Number_
301
+ # <b>Required: </b> _No_
302
+ # <b>Example: </b> _22.5_ OU _2_
303
+ # <b>tag: </b> vSeg
304
+ #
305
+ attr_accessor :total_seguro
306
+ alias_attribute :vSeg, :total_seguro
307
+
308
+ # Valor do Desconto
309
+ #
310
+ # <b>Type: </b> _Number_
311
+ # <b>Required: </b> _No_
312
+ # <b>Example: </b> _22.5_ OU _2_
313
+ # <b>tag: </b> vDesc
314
+ #
315
+ attr_accessor :total_desconto
316
+ alias_attribute :vDesc, :total_desconto
317
+
318
+ # Outras despesas acessórias
319
+ #
320
+ # <b>Type: </b> _Number_
321
+ # <b>Required: </b> _No_
322
+ # <b>Example: </b> _22.5_ OU _2_
323
+ # <b>tag: </b> vOutro
324
+ #
325
+ attr_accessor :total_outros
326
+ alias_attribute :vOutro, :total_outros
327
+
328
+ # Indica se valor do Item (vProd) entra no valor total da NF-e (vProd)
329
+ # 0=Valor do item (vProd) não compõe o valor total da NF-e
330
+ # 1=Valor do item (vProd) compõe o valor total da NF-e (vProd)
331
+ # (v2.0)
332
+ #
333
+ # Informar true ou false
334
+ # true = 1 (compõe o valor total da NF-e)
335
+ # false = 0 (NÃO compõe o valor total da NF-e)
336
+ #
337
+ # <b>Type: </b> _Boolean_
338
+ # <b>Required: </b> _Yes_
339
+ # <b>Example: </b> _true_
340
+ # <b>Default: </b> _true_
341
+ # <b>tag: </b> indTot
342
+ #
343
+ attr_accessor :soma_total_nfe
344
+ alias_attribute :indTot, :soma_total_nfe
345
+
346
+ # Código CEST
347
+ # Código Especificador da Substituição Tributária – CEST, que
348
+ # estabelece a sistemática de uniformização e identificação das
349
+ # mercadorias e bens passíveis de sujeição aos regimes de
350
+ # substituição tributária e de antecipação de recolhimento do
351
+ # ICMS
352
+ #
353
+ # <b>Type: </b> _Number_
354
+ # <b>Required: </b> _No_
355
+ # <b>Example: </b> _1234567_
356
+ # <b>Length: </b> _7_
357
+ # <b>tag: </b> CEST
358
+ #
359
+ attr_accessor :codigo_cest
360
+ alias_attribute :CEST, :codigo_cest
361
+
362
+ # Declaração de Importação
363
+ # Informar dados da importação
364
+ #
365
+ # <b>Type: </b> _BrNfe.declaracao_importacao_product_class_
366
+ # <b>Required: </b> _No_
367
+ # <b>Example: </b> _[BrNfe.declaracao_importacao_product_class.new]_
368
+ # <b>Length: </b> _max: 100_
369
+ # <b>tag: </b> DI
370
+ #
371
+ has_many :declaracoes_importacao, 'BrNfe.declaracao_importacao_product_class'
372
+ alias_attribute :DI, :declaracoes_importacao
373
+
374
+ # GRUPO DE INFORMAÇÕES DE EXPORTAÇÃO PARA O ITEM
375
+ # Informar apenas no Drawback e nas exportações
376
+ #
377
+ # <b>Type: </b> _BrNfe.detalhe_exportacao_product_class
378
+ # <b>Required: </b> _No_
379
+ # <b>Example: </b> _[BrNfe.detalhe_exportacao_product_class.new]_
380
+ # <b>Length: </b> _max: 500_
381
+ # <b>tag: </b> detExport
382
+ #
383
+ has_many :detalhes_exportacao, 'BrNfe.detalhe_exportacao_product_class'
384
+ alias_attribute :detExport, :detalhes_exportacao
385
+
386
+ # NÚMERO DO PEDIDO DE COMPRA
387
+ # Informação de interesse do emissor para controle do B2B. (v2.0)
388
+ #
389
+ # <b>Type: </b> _String_
390
+ # <b>Required: </b> _No_
391
+ # <b>Example: </b> _1234567_
392
+ # <b>Length: </b> _max: 15_
393
+ # <b>tag: </b> xPed
394
+ #
395
+ attr_accessor :numero_pedido_compra
396
+ alias_attribute :xPed, :numero_pedido_compra
397
+
398
+ # ITEM DO PEDIDO DE COMPRA
399
+ #
400
+ # <b>Type: </b> _Number_
401
+ # <b>Required: </b> _No_
402
+ # <b>Example: </b> _1234567_
403
+ # <b>Length: </b> _max: 15_
404
+ # <b>tag: </b> nItemPed
405
+ #
406
+ attr_accessor :item_pedido_compra
407
+ def item_pedido_compra
408
+ "#{@item_pedido_compra}".gsub(/[^\d]/,'')
409
+ end
410
+ alias_attribute :nItemPed, :item_pedido_compra
411
+
412
+ # NÚMERO DE CONTROLE DA FCI - FICHA DE CONTEÚDO DE IMPORTAÇÃO
413
+ # Informação relacionada com a Resolução 13/2012 do Senado
414
+ # Federal. Formato: Algarismos, letras maiúsculas de "A" a "F" e o
415
+ # caractere hífen. Exemplo: B01F70AF-10BF-4B1F-848C-65FF57F616FE
416
+ #
417
+ # <b>Type: </b> _String_
418
+ # <b>Required: </b> _No_
419
+ # <b>Example: </b> _B01F70AF-10BF-4B1F-848C-65FF57F616FE_
420
+ # <b>Length: </b> _36_
421
+ # <b>tag: </b> nFCI
422
+ #
423
+ attr_accessor :numero_fci
424
+ alias_attribute :nFCI, :numero_fci
425
+
426
+ # VALOR TOTAL DE TRIBUTOS FEDERAIS, ESTADUAIS E MUNICIPAIS
427
+ # NT 2013/003
428
+ #
429
+ # <b>Type: </b> _Float_
430
+ # <b>Required: </b> _No_
431
+ # <b>Example: </b> _178.46_
432
+ # <b>Length: </b> _13v2_
433
+ # <b>tag: </b> vTotTrib
434
+ #
435
+ attr_accessor :total_tributos
436
+ alias_attribute :vTotTrib, :total_tributos
437
+
438
+ #######################################################################
439
+ ################################ DEVOLUÇÃO ###########################
440
+ # PERCENTUAL DA MERCADORIA DEVOLVIDA
441
+ # O valor máximo deste percentual é 100%, no caso de devolução
442
+ # total da mercadoria.
443
+ #
444
+ # <b>Type: </b> _Float_
445
+ # <b>Required: </b> _No_
446
+ # <b>Example: </b> _30.0_
447
+ # <b>Length: </b> _13v2 - max: 100.0_
448
+ # <b>tag: </b> pDevol
449
+ #
450
+ attr_accessor :percentual_devolucao
451
+ alias_attribute :pDevol, :percentual_devolucao
452
+
453
+ # VALOR DO IPI DEVOLVIDO
454
+ #
455
+ # <b>Type: </b> _Float_
456
+ # <b>Required: </b> _No_
457
+ # <b>Example: </b> _137.47_
458
+ # <b>Length: </b> _13v2_
459
+ # <b>tag: </b> vIPIDevol
460
+ #
461
+ attr_accessor :total_ipi_devolucao
462
+ alias_attribute :vIPIDevol, :total_ipi_devolucao
463
+
464
+ #######################################################################
465
+ ################################ IMPOSTOS ###########################
466
+ # INFORMAÇÕES DO ICMS DA OPERAÇÃO PRÓPRIA E ST
467
+ # Informar apenas um dos grupos de tributação do ICMS
468
+ # (ICMS00, ICMS10, ...) (v2.0)
469
+ #
470
+ # <b>Type: </b> _HasOne_
471
+ # <b>Required: </b> _No_ (yes if tipo_produto == :product)
472
+ # <b>Example: </b> _BrNfe.icms_item_tax_product_class.new_
473
+ # <b>tag: </b> ICMS
474
+ #
475
+ has_one :icms, 'BrNfe.icms_item_tax_product_class', null: false
476
+ alias_attribute :ICMS, :icms
477
+
478
+ # IMPOSTO SOBRE PRODUTOS INDUSTRIALIZADOS - IPI
479
+ # Informar apenas quando o item for sujeito ao IPI
480
+ #
481
+ # <b>Type: </b> _HasOne_
482
+ # <b>Required: </b> _No_
483
+ # <b>Example: </b> _BrNfe.ipi_item_tax_product_class.new_
484
+ # <b>tag: </b> IPI
485
+ #
486
+ has_one :ipi, 'BrNfe.ipi_item_tax_product_class'
487
+ alias_attribute :IPI, :ipi
488
+
489
+ # Imposto de Importação - II
490
+ # Informar apenas quando o item for sujeito ao II
491
+ #
492
+ # <b>Type: </b> _HasOne_
493
+ # <b>Required: </b> _No_
494
+ # <b>Example: </b> _BrNfe.importacao_item_tax_product_class.new_
495
+ # <b>tag: </b> II
496
+ #
497
+ has_one :importacao, 'BrNfe.importacao_item_tax_product_class'
498
+ alias_attribute :II, :importacao
499
+
500
+ # PIS
501
+ # Informar apenas um dos grupos Q02, Q03, Q04 ou Q05 com
502
+ # base valor atribuído ao campo Q06 – CST do PIS
503
+ #
504
+ # <b>Type: </b> _HasOne_
505
+ # <b>Required: </b> _No_
506
+ # <b>Example: </b> _BrNfe.pis_item_tax_product_class.new_
507
+ # <b>tag: </b> PIS
508
+ #
509
+ has_one :pis, 'BrNfe.pis_item_tax_product_class', null: false
510
+ alias_attribute :PIS, :pis
511
+
512
+ # GRUPO PIS SUBSTITUIÇÃO TRIBUTÁRIA
513
+ #
514
+ # <b>Type: </b> _HasOne_
515
+ # <b>Required: </b> _No_
516
+ # <b>Example: </b> _BrNfe.pis_st_item_tax_product_class.new_
517
+ # <b>tag: </b> PISST
518
+ #
519
+ has_one :pis_st, 'BrNfe.pis_st_item_tax_product_class'
520
+ alias_attribute :PISST, :pis_st
521
+
522
+ # GRUPO COFINS
523
+ # Informar apenas um dos grupos S02, S03, S04 ou S04 com
524
+ # base valor atribuído ao campo de CST da COFINS
525
+ #
526
+ # <b>Type: </b> _HasOne_
527
+ # <b>Required: </b> _No_
528
+ # <b>Example: </b> _BrNfe.cofins_item_tax_product_class.new_
529
+ # <b>tag: </b> COFINS
530
+ #
531
+ has_one :cofins, 'BrNfe.cofins_item_tax_product_class', null: false
532
+ alias_attribute :COFINS, :cofins
533
+
534
+ # GRUPO COFINS SUBSTITUIÇÃO TRIBUTÁRIA - COFINS ST
535
+ #
536
+ # <b>Type: </b> _HasOne_
537
+ # <b>Required: </b> _No_
538
+ # <b>Example: </b> _BrNfe.cofins_st_item_tax_product_class.new_
539
+ # <b>tag: </b> COFINSST
540
+ #
541
+ has_one :cofins_st, 'BrNfe.cofins_st_item_tax_product_class'
542
+ alias_attribute :COFINSST, :cofins_st
543
+
544
+ # GRUPO ISSQN
545
+ # Campos para cálculo do ISSQN na NF-e conjugada, onde há a
546
+ # prestação de serviços sujeitos ao ISSQN e fornecimento de
547
+ # peças sujeitas ao ICMS.
548
+ # Grupo ISSQN é mutuamente exclusivo com os grupos ICMS, IPI
549
+ # e II, isto é se ISSQN for informado os grupos ICMS, IPI e II não
550
+ # serão informados e vice-versa (v2.0).
551
+ #
552
+ # <b>Type: </b> _HasOne_
553
+ # <b>Required: </b> _No_
554
+ # <b>Example: </b> _BrNfe.issqn_item_tax_product_class.new_
555
+ # <b>tag: </b> ISSQN
556
+ #
557
+ has_one :issqn, 'BrNfe.issqn_item_tax_product_class'
558
+ alias_attribute :ISSQN, :issqn
559
+
560
+ # Grupo de Tributação do ICMS para a UF de destino
561
+ # Grupo a ser informado nas vendas interestaduais para
562
+ # consumidor final, não contribuinte do ICMS.
563
+ #
564
+ # <b>Type: </b> _HasOne_
565
+ # <b>Required: </b> _No_
566
+ # <b>Example: </b> _BrNfe.icms_uf_destino_item_tax_product_class.new_
567
+ # <b>tag: </b> ICMSUFDest
568
+ #
569
+ has_one :icms_uf_destino, 'BrNfe.icms_uf_destino_item_tax_product_class'
570
+ alias_attribute :ICMSUFDest, :icms_uf_destino
571
+
572
+ # INFORMAÇÕES ADICIONAIS DO PRODUTO (PARA O ITEM DA NF-e)
573
+ # Norma referenciada, informações complementares, etc.
574
+ #
575
+ # <b>Type: </b> _String_
576
+ # <b>Required: </b> _No_
577
+ # <b>Example: </b> _'DOCUMENTO EMITIDO POR ME OU EPP OPTANTE PELO SIMPLES NACIONA'_
578
+ # <b>Length: </b> _max: 500_
579
+ # <b>tag: </b> infAdProd
580
+ #
581
+ attr_accessor :informacoes_adicionais
582
+ alias_attribute :infAdProd, :informacoes_adicionais
583
+
584
+
585
+ def default_values
586
+ {
587
+ tipo_produto: :product,
588
+ soma_total_nfe: true,
589
+ }
590
+ end
591
+
592
+ validate_has_one :icms, if: :is_product?
593
+ validate_has_one :pis
594
+ validate_has_one :cofins
595
+ validate_has_one :ipi
596
+ validate_has_one :pis_st
597
+ validate_has_one :cofins_st
598
+ validate_has_one :importacao
599
+ validate_has_one :issqn
600
+ validate_has_one :icms_uf_destino
601
+
602
+ validates :tipo_produto, presence: true
603
+ validates :tipo_produto, inclusion: {in: [:product, :service, :other]}
604
+
605
+ validates :codigo_produto, length: {maximum: 60}
606
+ validates :codigo_ean, length: {maximum: 14}
607
+ validates :descricao_produto, length: {maximum: 120}
608
+
609
+ validates :codigo_ncm, presence: true
610
+ validates :codigo_ncm, length: {maximum: 8}, allow_blank: true, if: :is_product?
611
+ validates :codigo_ncm, length: {maximum: 2}, allow_blank: true, unless: :is_product?
612
+
613
+ validates :codigos_nve, length: {maximum: 8}
614
+
615
+ validates :codigo_extipi, length: {in: 2..3}, allow_blank: true
616
+
617
+ validates :unidade_comercial, presence: true
618
+ validates :unidade_comercial, length: {maximum: 6}, allow_blank: true
619
+ validates :quantidade_comercial, presence: true
620
+ validates :quantidade_comercial, numericality: true
621
+ validates :valor_unitario_comercial, presence: true
622
+ validates :valor_unitario_comercial, numericality: true
623
+ validates :valor_total_produto, presence: true
624
+ validates :valor_total_produto, numericality: true
625
+
626
+ validates :codigo_ean_tributavel, length: {maximum: 14}
627
+ validates :quantidade_tributavel, presence: true
628
+ validates :quantidade_tributavel, numericality: true
629
+ validates :unidade_tributavel, presence: true
630
+ validates :unidade_tributavel, length: {maximum: 6}, allow_blank: true
631
+ validates :valor_unitario_tributavel, presence: true
632
+ validates :valor_unitario_tributavel, numericality: true
633
+
634
+ validates :total_frete, numericality: true, allow_blank: true
635
+ validates :total_seguro, numericality: true, allow_blank: true
636
+ validates :total_desconto, numericality: true, allow_blank: true
637
+ validates :total_outros, numericality: true, allow_blank: true
638
+
639
+ validates :codigo_cest, length: {maximum: 7}
640
+
641
+ validate_has_many :declaracoes_importacao, message: :invalid_declaracao_importacao
642
+ validates :declaracoes_importacao, length: {maximum: 100}
643
+ validate_has_many :detalhes_exportacao, message: :invalid_detalhe_exportacao
644
+
645
+ validates :numero_pedido_compra, length: {maximum: 15}
646
+ validates :item_pedido_compra, length: {maximum: 6}
647
+
648
+ validates :numero_fci, format: { with: /\A[A-F\d\-]+\z/ }, allow_blank: true
649
+ validates :numero_fci, length: {is: 36}, allow_blank: true
650
+
651
+ validates :icms, presence: true, if: :is_product?
652
+ validates :issqn, presence: true, if: :is_service?
653
+
654
+ validates :informacoes_adicionais, length: {maximum: 500}
655
+ validates :percentual_devolucao, numericality: {greater_than_or_equal_to: 0.0, less_than_or_equal_to: 100.0}, allow_blank: true
656
+
657
+ def is_product?
658
+ tipo_produto == :product
659
+ end
660
+
661
+ def is_service?
662
+ tipo_produto == :service
663
+ end
664
+
665
+ private
666
+
667
+ #####################################################################
668
+ ############################# CÁLCULOS ##############################
669
+ def valor_unitario_comercial_calculation
670
+ (valor_total_produto.to_f/quantidade_comercial.to_f).round(10) if quantidade_comercial.to_f > 0
671
+ end
672
+ def valor_unitario_tributavel_calculation
673
+ (valor_total_produto.to_f/quantidade_tributavel.to_f).round(10) if quantidade_tributavel.to_f > 0
674
+ end
675
+ end
676
+ end
677
+ end
678
+ end