br_nfe 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,1173 @@
1
+ module BrNfe
2
+ module Product
3
+ class NotaFiscal < BrNfe::ActiveModelBase
4
+ # include BrNfe::Association::HaveCondicaoPagamento
5
+
6
+ # Identificação do emitente da NF-e
7
+ #
8
+ # <b>Type: </b> _BrNfe.emitente_product_class
9
+ # <b>Required: </b> _Yes_
10
+ # <b>tag: </b> emit
11
+ #
12
+ has_one :emitente, 'BrNfe.emitente_product_class', null: false
13
+ alias_attribute :emit, :emitente
14
+
15
+ # Identificação do Destinatário da NF-e
16
+ # Grupo obrigatório para a NF-e (modelo 55)
17
+ #
18
+ # <b>Type: </b> _BrNfe.destinatario_product_class_
19
+ # <b>Required: </b> _Yes_ (No if modelo_nf == 65)
20
+ # <b>tag: </b> dest
21
+ #
22
+ has_one :destinatario, 'BrNfe.destinatario_product_class', null: false
23
+ alias_attribute :dest, :destinatario
24
+
25
+ # Código do Tipo de Emissão da NF-e
26
+ # ✓ 1=Emissão normal (não em contingência);
27
+ # ✓ 6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
28
+ # ✓ 7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
29
+ # ✓ 9=Contingência off-line da NFC-e (as demais opções de contingência são válidas
30
+ # também para a NFC-e).
31
+ # Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
32
+ #
33
+ # <b>Type: </b> _Number_
34
+ # <b>Required: </b> _Yes_
35
+ # <b>Default: </b> _1_
36
+ # <b>Length: </b> _1_
37
+ # <b>tag: </b> tpEmis
38
+ #
39
+ attr_accessor :codigo_tipo_emissao
40
+ alias_attribute :tpEmis, :codigo_tipo_emissao
41
+
42
+
43
+ attr_accessor :chave_de_acesso
44
+
45
+ def chave_de_acesso_dv
46
+ chave_de_acesso[-1]
47
+ end
48
+ def chave_de_acesso_sem_dv
49
+ chave_de_acesso[0..-2]
50
+ end
51
+ def chave_de_acesso
52
+ @chave_de_acesso ||= gerar_chave_de_acesso!
53
+ end
54
+
55
+
56
+ # Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo
57
+ # emitente para cada NF-e para evitar acessos indevidos da NF-e.
58
+ # Resumo: É um código controlado pelo sistema. Pode por exemplo ser
59
+ # utilizado o ID da tabela da nota fiscal.
60
+ #
61
+ # <b>Type: </b> _Number_
62
+ # <b>Required: </b> _Yes_
63
+ # <b>Default: </b> _nil_
64
+ # <b>Length: </b> _max: 8_
65
+ # <b>tag: </b> cNF
66
+ #
67
+ attr_accessor :codigo_nf
68
+ alias_attribute :cNF, :codigo_nf
69
+
70
+
71
+ # Série do Documento Fiscal, preencher com zeros na hipótese
72
+ # de a NF-e não possuir série. (v2.0)
73
+ # Série 890-899: uso exclusivo para emissão de NF-e avulsa, pelo
74
+ # contribuinte com seu certificado digital, através do site do Fisco
75
+ # (procEmi=2). (v2.0)
76
+ # Serie 900-999: uso exclusivo de NF-e emitidas no SCAN. (v2.0)
77
+ #
78
+ # <b>Type: </b> _Number_
79
+ # <b>Required: </b> _Yes_
80
+ # <b>Default: </b> _nil_
81
+ # <b>Length: </b> _max: 3_
82
+ # <b>tag: </b> serie
83
+ #
84
+ attr_accessor :serie
85
+
86
+ # Número do Documento Fiscal.
87
+ # Número da nota fiscal De fato
88
+ #
89
+ # <b>Type: </b> _Number_
90
+ # <b>Required: </b> _Yes_
91
+ # <b>Default: </b> _nil_
92
+ # <b>Length: </b> _max: 9_
93
+ # <b>tag: </b> nNF
94
+ #
95
+ attr_accessor :numero_nf
96
+ alias_attribute :nNF, :numero_nf
97
+
98
+ # Descrição da Natureza da Operação
99
+ # Informar a natureza da operação de que decorrer a saída ou a
100
+ # entrada, tais como: venda, compra, transferência, devolução,
101
+ # importação, consignação, remessa (para fins de demonstração,
102
+ # de industrialização ou outra), conforme previsto na alínea 'i',
103
+ # inciso I, art. 19 do CONVÊNIO S/No, de 15 de dezembro de
104
+ # 1970.
105
+ #
106
+ # <b>Type: </b> _String_
107
+ # <b>Required: </b> _Yes_
108
+ # <b>Default: </b> _'Venda'_
109
+ # <b>tag: </b> natOp
110
+ #
111
+ attr_accessor :natureza_operacao
112
+ alias_attribute :natOp, :natureza_operacao
113
+
114
+ # Indicador da forma de pagamento
115
+ # 0=Pagamento à vista; (Default)
116
+ # 1=Pagamento a prazo;
117
+ # 2=Outros.
118
+ #
119
+ # <b>Type: </b> _Number_ OR _String_
120
+ # <b>Required: </b> _Yes_
121
+ # <b>Default: </b> _0_
122
+ # <b>Length: </b> _1_
123
+ # <b>tag: </b> indPag
124
+ #
125
+ attr_accessor :forma_pagamento
126
+ alias_attribute :indPag, :forma_pagamento
127
+
128
+ # Código do Modelo do Documento Fiscal
129
+ # 55=NF-e emitida em substituição ao modelo 1 ou 1A; (Default)
130
+ # 65=NFC-e, utilizada nas operações de venda no varejo (a critério da UF aceitar este modelo de documento).
131
+ #
132
+ # <b>Type: </b> _Number_ OR _String_
133
+ # <b>Required: </b> _Yes_
134
+ # <b>Default: </b> _55_
135
+ # <b>Length: </b> _2_
136
+ # <b>tag: </b> mod
137
+ #
138
+ attr_accessor :modelo_nf
139
+ alias_attribute :mod, :modelo_nf
140
+
141
+ # Data e hora de emissão do Documento Fiscal
142
+ #
143
+ # <b>Type: </b> _Time_
144
+ # <b>Required: </b> _Yes_
145
+ # <b>Default: </b> _Time.current_
146
+ # <b>tag: </b> dhEmi
147
+ #
148
+ attr_accessor :data_hora_emissao
149
+ def data_hora_emissao
150
+ convert_to_time(@data_hora_emissao)
151
+ end
152
+ alias_attribute :dhEmi, :data_hora_emissao
153
+
154
+ # Data e hora de Saída ou da Entrada da Mercadoria/Produto
155
+ # Campo não considerado para a NFC-e.
156
+ #
157
+ # <b>Type: </b> _Time_
158
+ # <b>Required: </b> _Yes_ (apenas para modelo 55)
159
+ # <b>Default: </b> _Time.current_
160
+ # <b>tag: </b> dhSaiEnt
161
+ #
162
+ attr_accessor :data_hora_expedicao
163
+ def data_hora_expedicao
164
+ convert_to_time(@data_hora_expedicao)
165
+ end
166
+ alias_attribute :dhSaiEnt, :data_hora_expedicao
167
+
168
+ # Tipo de Operação
169
+ # 0=Entrada;
170
+ # 1=Saída (Default)
171
+ #
172
+ # <b>Type: </b> _Number_ OR _String_
173
+ # <b>Required: </b> _Yes_
174
+ # <b>Default: </b> _1_
175
+ # <b>Length: </b> _1_
176
+ # <b>tag: </b> tpNF
177
+ #
178
+ attr_accessor :tipo_operacao
179
+ alias_attribute :tpNF, :tipo_operacao
180
+
181
+ # Formato de Impressão do DANFE
182
+ # 0=Sem geração de DANFE;
183
+ # 1=DANFE normal, Retrato; (Default)
184
+ # 2=DANFE normal, Paisagem;
185
+ # 3=DANFE Simplificado;
186
+ # 4=DANFE NFC-e;
187
+ # 5=DANFE NFC-e em mensagem eletrônica (o envio de mensagem eletrônica pode
188
+ # ser feita de forma simultânea com a impressão do DANFE; usar o tpImp=5
189
+ # quando esta for a única forma de disponibilização do DANFE).
190
+ #
191
+ # <b>Required: </b> _Yes_
192
+ # <b>Default: </b> _1_
193
+ # <b>tag: </b> tpEmis
194
+ #
195
+ attr_accessor :tipo_impressao
196
+ alias_attribute :tpEmis, :tipo_impressao
197
+
198
+ # Finalidade de emissão da NF-e
199
+ # 1=NF-e normal; (Default)
200
+ # 2=NF-e complementar;
201
+ # 3=NF-e de ajuste;
202
+ # 4=Devolução de mercadoria.
203
+ #
204
+ # <b>Required: </b> _Yes_
205
+ # <b>Default: </b> _1_
206
+ # <b>tag: </b> finNFe
207
+ #
208
+ attr_accessor :finalidade_emissao
209
+ alias_attribute :finNFe, :finalidade_emissao
210
+
211
+
212
+ # Indica operação com Consumidor final
213
+ # false=Normal;
214
+ # true=Consumidor final;
215
+ #
216
+ # Preencher esse campo com true ou false
217
+ #
218
+ # <b>Type: </b> _Boolean_
219
+ # <b>Required: </b> _Yes_
220
+ # <b>Default: </b> _false_
221
+ # <b>tag: </b> indFinal
222
+ #
223
+ attr_accessor :consumidor_final
224
+ def consumidor_final
225
+ convert_to_boolean(@consumidor_final)
226
+ end
227
+ alias_attribute :indFinal, :consumidor_final
228
+
229
+ # Indicador de presença do comprador no estabelecimento comercial no
230
+ # momento da operação:
231
+ # 0=Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste);
232
+ # 1=Operação presencial;
233
+ # 2=Operação não presencial, pela Internet;
234
+ # 3=Operação não presencial, Teleatendimento;
235
+ # 4=NFC-e em operação com entrega a domicílio;
236
+ # 9=Operação não presencial, outros. (Default)
237
+ #
238
+ # <b>Required: </b> _Yes_
239
+ # <b>Default: </b> _9_
240
+ # <b>tag: </b> indPres
241
+ #
242
+ attr_accessor :presenca_comprador
243
+ alias_attribute :indPres, :presenca_comprador
244
+
245
+ # Processo de emissão da NF-e
246
+ # 0=Emissão de NF-e com aplicativo do contribuinte; (Default)
247
+ # 1=Emissão de NF-e avulsa pelo Fisco;
248
+ # 2=Emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site do Fisco;
249
+ # 3=Emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
250
+ #
251
+ # <b>Required: </b> _Yes_
252
+ # <b>Default: </b> _0_
253
+ # <b>tag: </b> procEmi
254
+ #
255
+ attr_accessor :processo_emissao
256
+ alias_attribute :procEmi, :processo_emissao
257
+
258
+ # Versão do Processo de emissão da NF-e
259
+ # Informar a versão do aplicativo emissor de NF-e.
260
+ #
261
+ # <b>Required: </b> _Yes_
262
+ # <b>Default: </b> _0_
263
+ # <b>tag: </b> verProc
264
+ #
265
+ attr_accessor :versao_aplicativo
266
+ alias_attribute :verProc, :versao_aplicativo
267
+
268
+ # Endereço da retirada da mercadoria
269
+ #
270
+ # <b>Type: </b> _BrNfe.endereco_class_
271
+ # <b>Required: </b> _No_
272
+ # <b>Default: </b> _nil_
273
+ # <b>tag: </b> retirada
274
+ #
275
+ has_one :endereco_retirada, 'BrNfe.endereco_class'
276
+ alias_attribute :retirada, :endereco_retirada
277
+
278
+ # CPF ou CNPJ do local de retirada da mercadoria.
279
+ # Só é obrigatório se o endereco_retirada for preenchido
280
+ #
281
+ # <b>Type: </b> _String_
282
+ # <b>Required: </b> _No_ (_Yes_ if endereco_retirada is present)
283
+ # <b>Default: </b> _nil_
284
+ # <b>tag: </b> retirada/CPF ou retirada/CNPJ
285
+ #
286
+ attr_accessor :endereco_retirada_cpf_cnpj
287
+ def endereco_retirada_cpf_cnpj
288
+ return unless @endereco_retirada_cpf_cnpj.present?
289
+ BrNfe::Helper::CpfCnpj.new(@endereco_retirada_cpf_cnpj).sem_formatacao
290
+ end
291
+
292
+
293
+ # Endereço da entrega da mercadoria
294
+ # Informar apenas quando for diferente do endereço do destinatário
295
+ #
296
+ # <b>Type: </b> _BrNfe.endereco_class_
297
+ # <b>Required: </b> _No_
298
+ # <b>Default: </b> _nil_
299
+ # <b>tag: </b> entrega
300
+ #
301
+ has_one :endereco_entrega, 'BrNfe.endereco_class'
302
+ alias_attribute :entrega, :endereco_entrega
303
+
304
+ # CPF ou CNPJ do local de entrega da mercadoria.
305
+ # Só é obrigatório se o endereco_entrega for preenchido
306
+ #
307
+ # <b>Type: </b> _String_
308
+ # <b>Required: </b> _No_ (_Yes_ if endereco_entrega is present)
309
+ # <b>Default: </b> _nil_
310
+ # <b>tag: </b> entrega/CPF ou entrega/CNPJ
311
+ #
312
+ attr_accessor :endereco_entrega_cpf_cnpj
313
+ def endereco_entrega_cpf_cnpj
314
+ return unless @endereco_entrega_cpf_cnpj.present?
315
+ BrNfe::Helper::CpfCnpj.new(@endereco_entrega_cpf_cnpj).sem_formatacao
316
+ end
317
+
318
+ # CPF ou CNPJ das pessoas que estão autorizadas a fazer o download do XML da NF-e.
319
+ # Deve ser um Array com os CPF's e CNPJ's válidos.
320
+ #
321
+ # <b>Type: </b> _Array_
322
+ # <b>Required: </b> _No_
323
+ # <b>Default: </b> _[]_
324
+ # <b>tag: </b> autXML
325
+ #
326
+ attr_accessor :autorizados_download_xml
327
+ def autorizados_download_xml
328
+ @autorizados_download_xml = [@autorizados_download_xml].flatten unless @autorizados_download_xml.is_a?(Array)
329
+ @autorizados_download_xml.compact!
330
+ @autorizados_download_xml
331
+ end
332
+ alias_attribute :autXML, :autorizados_download_xml
333
+
334
+ # Transporte da mercadoria
335
+ # Informações referentes ao transporte da mercadoria.
336
+ #
337
+ # <b>Type: </b> _BrNfe.transporte_product_class_
338
+ # <b>Required: </b> _No_
339
+ # <b>Default: </b> _nil_
340
+ # <b>tag: </b> transp
341
+ #
342
+ has_one :transporte, 'BrNfe.transporte_product_class'
343
+ alias_attribute :transp, :transporte
344
+
345
+ # Dados da cobrança da NF-e
346
+ # Fatura e Duplicatas da Nota Fiscal
347
+ # Utilizado para especificar os dados da fatura e das duplicatas.
348
+ # No caso desta GEM, a fatura contém o Array de duplicatas.
349
+ # Ex:
350
+ # self.fatura.duplicatas
351
+ # => [#<::Cobranca::Duplicata:0x00000006302b80 ...>, #<::Cobranca::Duplicata:0x00000046465bw4 ...>]
352
+ #
353
+ # <b>Type: </b> _BrNfe.fatura_product_class_
354
+ # <b>Required: </b> _No_
355
+ # <b>Default: </b> _nil_
356
+ # <b>Exemplo: </b> _BrNfe::Product::Nfe::Cobranca::Fatura.new(numero_fatura: 'FAT646498'...)_
357
+ # <b>tag: </b> cobr
358
+ #
359
+ has_one :fatura, 'BrNfe.fatura_product_class'
360
+ alias_attribute :cobranca, :fatura
361
+ alias_attribute :cobr, :fatura
362
+
363
+ # Array com as informações dos pagamentos
364
+ # IMPORTANTE: Utilizado apenas para NFC-e
365
+ #
366
+ # Pode ser adicionado os dados dos pagamentos em forma de `Hash`
367
+ # ou o próprio objeto da classe BrNfe.pagamento_product_class.
368
+ #
369
+ # Exemplo com Hash:
370
+ # self.pagamentos = [{forma_pagamento: '1', total: 100.00, ...},{forma_pagamento: '2', total: 200.00, ...}]
371
+ # self.pagamentos << {forma_pagamento: '3', total: 300.00, ...}
372
+ # self.pagamentos << {forma_pagamento: '4', total: 400.00, ...}
373
+ #
374
+ # Exemplo com Objetos:
375
+ # self.pagamentos = [BrNfe::Product::Nfe::Cobranca::Pagamento.new({forma_pagamento: '5', total: 500.00, ...}),{forma_pagamento: '11', total: 600.00, ...}]
376
+ # self.pagamentos << BrNfe::Product::Nfe::Cobranca::Pagamento.new({forma_pagamento: '10', total: 700.00, ...})
377
+ # self.pagamentos << {forma_pagamento: '12', total: 800.00, ...}
378
+ #
379
+ # Sempre vai retornar um Array de objetos da class configurada em `BrNfe.pagamento_product_class`
380
+ #
381
+ # <b>Tipo: </b> _BrNfe.pagamento_product_class (BrNfe::Product::Nfe::Cobranca::Pagamento)_
382
+ # <b>Min: </b> _0_
383
+ # <b>Max: </b> _100_
384
+ # <b>Default: </b> _[]_
385
+ # <b>tag: </b> pag
386
+ #
387
+ has_many :pagamentos, 'BrNfe.pagamento_product_class'
388
+ alias_attribute :pag, :pagamentos
389
+
390
+ # DETALHAMENTO DE PRODUTOS E SERVIÇOS
391
+ #
392
+ # <b>Type: </b> _BrNfe.item_product_class (BrNfe::Product::Nfe::Item)_
393
+ # <b>Default: </b> _[]_
394
+ # <b>Length: </b> _min: 1, max: 990_
395
+ # <b>tag: </b> det
396
+ #
397
+ has_many :itens, 'BrNfe.item_product_class'
398
+ alias_attribute :det, :itens
399
+
400
+ ##########################################################################
401
+ ######################### TOTAIS PARA PRODUTOS #########################
402
+ # BASE DE CÁLCULO DO ICMS
403
+ #
404
+ # <b>Type: </b> _Float_
405
+ # <b>Required: </b> _Yes_
406
+ # <b>Example: </b> _178.46_
407
+ # <b>Length: </b> _13v2_
408
+ # <b>tag: </b> total/ICMSTot/vBC
409
+ #
410
+ attr_accessor :total_icms_base_calculo
411
+ alias_attribute :ICMSTot_vBC, :total_icms_base_calculo
412
+ validates :total_icms_base_calculo, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
413
+
414
+ # VALOR TOTAL DO ICMS
415
+ #
416
+ # <b>Type: </b> _Float_
417
+ # <b>Required: </b> _Yes_
418
+ # <b>Example: </b> _178.46_
419
+ # <b>Length: </b> _13v2_
420
+ # <b>tag: </b> total/ICMSTot/vICMS
421
+ #
422
+ attr_accessor :total_icms
423
+ alias_attribute :ICMSTot_vICMS, :total_icms
424
+ validates :total_icms, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
425
+
426
+ # VALOR TOTAL DO ICMS DESONERADO
427
+ #
428
+ # <b>Type: </b> _Float_
429
+ # <b>Required: </b> _Yes_
430
+ # <b>Example: </b> _178.46_
431
+ # <b>Length: </b> _13v2_
432
+ # <b>tag: </b> total/ICMSTot/vICMSDeson
433
+ #
434
+ attr_accessor :total_icms_desonerado
435
+ alias_attribute :ICMSTot_vICMSDeson, :total_icms_desonerado
436
+ validates :total_icms_desonerado, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
437
+
438
+ # VALOR TOTAL DO ICMS RELATIVO FUNDO DE COMBATE À POBREZA(FCP)
439
+ # DA UF DE DESTINO
440
+ # Valor total do ICMS relativo ao Fundo de Combate à Pobreza
441
+ # (FCP) para a UF de destino.
442
+ #
443
+ # <b>Type: </b> _Float_
444
+ # <b>Required: </b> _No_
445
+ # <b>Example: </b> _108.46_
446
+ # <b>Length: </b> _13v2_
447
+ # <b>tag: </b> total/ICMSTot/vFCPUFDest
448
+ #
449
+ attr_accessor :total_icms_fcp_uf_destino
450
+ alias_attribute :ICMSTot_vFCPUFDest, :total_icms_fcp_uf_destino
451
+ validates :total_icms_fcp_uf_destino, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
452
+
453
+ # VALOR TOTAL DO ICMS INTERESTADUAL PARA A UF DE DESTINO
454
+ # Valor total do ICMS Interestadual para a UF de destino, já
455
+ # considerando o valor do ICMS relativo ao Fundo de Combate à
456
+ # Pobreza naquela UF
457
+ #
458
+ # <b>Type: </b> _Float_
459
+ # <b>Required: </b> _No_
460
+ # <b>Example: </b> _108.46_
461
+ # <b>Length: </b> _13v2_
462
+ # <b>tag: </b> total/ICMSTot/vICMSUFDest
463
+ #
464
+ attr_accessor :total_icms_uf_destino
465
+ alias_attribute :ICMSTot_vICMSUFDest, :total_icms_uf_destino
466
+ validates :total_icms_uf_destino, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
467
+
468
+ # VALOR TOTAL DO ICMS INTERESTADUAL PARA A UF DO REMETENTE
469
+ # Valor total do ICMS Interestadual para a UF do remetente.
470
+ # Nota: A partir de 2019, este valor será zero.
471
+ #
472
+ # <b>Type: </b> _Float_
473
+ # <b>Required: </b> _No_
474
+ # <b>Example: </b> _108.46_
475
+ # <b>Length: </b> _13v2_
476
+ # <b>tag: </b> total/ICMSTot/vICMSUFRemet
477
+ #
478
+ attr_accessor :total_icms_uf_origem
479
+ alias_attribute :ICMSTot_vICMSUFRemet, :total_icms_uf_origem
480
+ validates :total_icms_uf_origem, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
481
+
482
+ # BASE DE CÁLCULO DO ICMS ST
483
+ #
484
+ # <b>Type: </b> _Float_
485
+ # <b>Required: </b> _Yes_
486
+ # <b>Example: </b> _178.46_
487
+ # <b>Length: </b> _13v2_
488
+ # <b>tag: </b> total/ICMSTot/vBCST
489
+ #
490
+ attr_accessor :total_icms_base_calculo_st
491
+ alias_attribute :ICMSTot_vBCST, :total_icms_base_calculo_st
492
+ validates :total_icms_base_calculo_st, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
493
+
494
+ # VALOR TOTAL DO ICMS ST
495
+ #
496
+ # <b>Type: </b> _Float_
497
+ # <b>Required: </b> _Yes_
498
+ # <b>Example: </b> _178.46_
499
+ # <b>Length: </b> _13v2_
500
+ # <b>tag: </b> total/ICMSTot/vST
501
+ #
502
+ attr_accessor :total_icms_st
503
+ alias_attribute :ICMSTot_vST, :total_icms_st
504
+ validates :total_icms_st, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
505
+
506
+ # VALOR TOTAL DOS PRODUTOS E SERVIÇOS
507
+ #
508
+ # <b>Type: </b> _Float_
509
+ # <b>Required: </b> _Yes_
510
+ # <b>Example: </b> _178.46_
511
+ # <b>Length: </b> _13v2_
512
+ # <b>tag: </b> total/ICMSTot/vProd
513
+ #
514
+ attr_accessor :total_produtos
515
+ alias_attribute :ICMSTot_vProd, :total_produtos
516
+ validates :total_produtos, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
517
+
518
+ # VALOR TOTAL DO FRETE
519
+ #
520
+ # <b>Type: </b> _Float_
521
+ # <b>Required: </b> _Yes_
522
+ # <b>Example: </b> _178.46_
523
+ # <b>Length: </b> _13v2_
524
+ # <b>tag: </b> total/ICMSTot/vFrete
525
+ #
526
+ attr_accessor :total_frete
527
+ alias_attribute :ICMSTot_vFrete, :total_frete
528
+ validates :total_frete, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
529
+
530
+ # VALOR TOTAL DO SEGURO
531
+ #
532
+ # <b>Type: </b> _Float_
533
+ # <b>Required: </b> _Yes_
534
+ # <b>Example: </b> _178.46_
535
+ # <b>Length: </b> _13v2_
536
+ # <b>tag: </b> total/ICMSTot/vSeg
537
+ #
538
+ attr_accessor :total_seguro
539
+ alias_attribute :ICMSTot_vSeg, :total_seguro
540
+ validates :total_seguro, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
541
+
542
+ # VALOR TOTAL DO DESCONTO
543
+ #
544
+ # <b>Type: </b> _Float_
545
+ # <b>Required: </b> _Yes_
546
+ # <b>Example: </b> _178.46_
547
+ # <b>Length: </b> _13v2_
548
+ # <b>tag: </b> total/ICMSTot/vDesc
549
+ #
550
+ attr_accessor :total_desconto
551
+ alias_attribute :ICMSTot_vDesc, :total_desconto
552
+ validates :total_desconto, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
553
+
554
+ # VALOR TOTAL DO II
555
+ #
556
+ # <b>Type: </b> _Float_
557
+ # <b>Required: </b> _Yes_
558
+ # <b>Example: </b> _178.46_
559
+ # <b>Length: </b> _13v2_
560
+ # <b>tag: </b> total/ICMSTot/vII
561
+ #
562
+ attr_accessor :total_imposto_importacao
563
+ alias_attribute :ICMSTot_vII, :total_imposto_importacao
564
+ validates :total_imposto_importacao, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
565
+
566
+ # VALOR TOTAL DO IPI
567
+ #
568
+ # <b>Type: </b> _Float_
569
+ # <b>Required: </b> _Yes_
570
+ # <b>Example: </b> _178.46_
571
+ # <b>Length: </b> _13v2_
572
+ # <b>tag: </b> total/ICMSTot/vIPI
573
+ #
574
+ attr_accessor :total_ipi
575
+ alias_attribute :ICMSTot_vIPI, :total_ipi
576
+ validates :total_ipi, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
577
+
578
+ # VALOR TOTAL DO PIS
579
+ #
580
+ # <b>Type: </b> _Float_
581
+ # <b>Required: </b> _Yes_
582
+ # <b>Example: </b> _178.46_
583
+ # <b>Length: </b> _13v2_
584
+ # <b>tag: </b> total/ICMSTot/vPIS
585
+ #
586
+ attr_accessor :total_pis
587
+ alias_attribute :ICMSTot_vPIS, :total_pis
588
+ validates :total_pis, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
589
+
590
+ # VALOR TOTAL DO COFINS
591
+ #
592
+ # <b>Type: </b> _Float_
593
+ # <b>Required: </b> _Yes_
594
+ # <b>Example: </b> _178.46_
595
+ # <b>Length: </b> _13v2_
596
+ # <b>tag: </b> total/ICMSTot/vCOFINS
597
+ #
598
+ attr_accessor :total_cofins
599
+ alias_attribute :ICMSTot_vCOFINS, :total_cofins
600
+ validates :total_cofins, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
601
+
602
+ # OUTRAS DESPESAS ACESSÓRIAS
603
+ #
604
+ # <b>Type: </b> _Float_
605
+ # <b>Required: </b> _Yes_
606
+ # <b>Example: </b> _178.46_
607
+ # <b>Length: </b> _13v2_
608
+ # <b>tag: </b> total/ICMSTot/vOutro
609
+ #
610
+ attr_accessor :total_outras_despesas
611
+ alias_attribute :ICMSTot_vOutro, :total_outras_despesas
612
+ validates :total_outras_despesas, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
613
+
614
+ # VALOR TOTAL DA NF-E
615
+ #
616
+ # <b>Type: </b> _Float_
617
+ # <b>Required: </b> _Yes_
618
+ # <b>Example: </b> _178.46_
619
+ # <b>Length: </b> _13v2_
620
+ # <b>tag: </b> total/ICMSTot/vNF
621
+ #
622
+ attr_accessor :total_nf
623
+ alias_attribute :ICMSTot_vNF, :total_nf
624
+ validates :total_nf, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
625
+
626
+ # VALOR APROXIMADO TOTAL DE TRIBUTOS FEDERAIS, ESTADUAIS E MUNICIPAIS.
627
+ # (NT 2013/003)
628
+ #
629
+ # <b>Type: </b> _Float_
630
+ # <b>Required: </b> _Yes_
631
+ # <b>Example: </b> _178.46_
632
+ # <b>Length: </b> _13v2_
633
+ # <b>tag: </b> total/ICMSTot/vTotTrib
634
+ #
635
+ attr_accessor :total_tributos
636
+ alias_attribute :ICMSTot_vTotTrib, :total_tributos
637
+ validates :total_tributos, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
638
+ ##########################################################################
639
+ ######################### TOTAIS PARA SERVIÇOS #########################
640
+ # VALOR TOTAL DOS SERVIÇOS SOB NÃO-INCIDÊNCIA OU NÃO TRIBUTADOS PELO ICMS
641
+ #
642
+ # <b>Type: </b> _Float_
643
+ # <b>Required: </b> _Yes_
644
+ # <b>Example: </b> _178.46_
645
+ # <b>Length: </b> _13v2_
646
+ # <b>tag: </b> total/ISSQNtot/vServ
647
+ #
648
+ attr_accessor :total_servicos
649
+ alias_attribute :ISSQNtot_vServ, :total_servicos
650
+ validates :total_servicos, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
651
+
652
+ # VALOR TOTAL BASE DE CÁLCULO DO ISS
653
+ #
654
+ # <b>Type: </b> _Float_
655
+ # <b>Required: </b> _No_
656
+ # <b>Example: </b> _178.46_
657
+ # <b>Length: </b> _13v2_
658
+ # <b>tag: </b> total/ISSQNtot/vBC
659
+ #
660
+ attr_accessor :total_servicos_base_calculo
661
+ alias_attribute :ISSQNtot_vBC, :total_servicos_base_calculo
662
+ validates :total_servicos_base_calculo, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
663
+
664
+ # VALOR TOTAL DO ISS
665
+ #
666
+ # <b>Type: </b> _Float_
667
+ # <b>Required: </b> _No_
668
+ # <b>Example: </b> _178.46_
669
+ # <b>Length: </b> _13v2_
670
+ # <b>tag: </b> total/ISSQNtot/vISS
671
+ #
672
+ attr_accessor :total_servicos_iss
673
+ alias_attribute :ISSQNtot_vISS, :total_servicos_iss
674
+ validates :total_servicos_iss, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
675
+
676
+ # VALOR TOTAL DO PIS SOBRE SERVIÇOS
677
+ #
678
+ # <b>Type: </b> _Float_
679
+ # <b>Required: </b> _No_
680
+ # <b>Example: </b> _178.46_
681
+ # <b>Length: </b> _13v2_
682
+ # <b>tag: </b> total/ISSQNtot/vPIS
683
+ #
684
+ attr_accessor :total_servicos_pis
685
+ alias_attribute :ISSQNtot_vPIS, :total_servicos_pis
686
+ validates :total_servicos_pis, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
687
+
688
+ # VALOR TOTAL DA COFINS SOBRE SERVIÇOS
689
+ #
690
+ # <b>Type: </b> _Float_
691
+ # <b>Required: </b> _No_
692
+ # <b>Example: </b> _178.46_
693
+ # <b>Length: </b> _13v2_
694
+ # <b>tag: </b> total/ISSQNtot/vCOFINS
695
+ #
696
+ attr_accessor :total_servicos_cofins
697
+ alias_attribute :ISSQNtot_vCOFINS, :total_servicos_cofins
698
+ validates :total_servicos_cofins, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
699
+
700
+ # DATA DA PRESTAÇÃO DO SERVIÇO
701
+ #
702
+ #
703
+ # <b>Type: </b> _Date_
704
+ # <b>Required: </b> _Yes_ apenas se tiver algum serviço nos itens
705
+ # <b>Default: </b> _Date.current_
706
+ # <b>Example: </b> _Date.current_
707
+ # <b>Length: </b> _8_ YYYYMMDD
708
+ # <b>tag: </b> total/ISSQNtot/dCompet
709
+ #
710
+ attr_accessor :servicos_data_prestacao
711
+ def servicos_data_prestacao
712
+ convert_to_date(@servicos_data_prestacao)
713
+ end
714
+ alias_attribute :ISSQNtot_dCompet, :servicos_data_prestacao
715
+ validates :servicos_data_prestacao, presence: true, if: :has_any_service?
716
+
717
+ # VALOR TOTAL DEDUÇÃO PARA REDUÇÃO DA BASE DE CÁLCULO
718
+ #
719
+ # <b>Type: </b> _Float_
720
+ # <b>Required: </b> _No_
721
+ # <b>Example: </b> _178.46_
722
+ # <b>Length: </b> _13v2_
723
+ # <b>tag: </b> total/ISSQNtot/vDeducao
724
+ #
725
+ attr_accessor :total_servicos_deducao
726
+ alias_attribute :ISSQNtot_vDeducao, :total_servicos_deducao
727
+ validates :total_servicos_deducao, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
728
+
729
+ # VALOR TOTAL OUTRAS RETENÇÕES DO ISSQN
730
+ #
731
+ # <b>Type: </b> _Float_
732
+ # <b>Required: </b> _No_
733
+ # <b>Example: </b> _178.46_
734
+ # <b>Length: </b> _13v2_
735
+ # <b>tag: </b> total/ISSQNtot/vOutro
736
+ #
737
+ attr_accessor :total_servicos_outras_retencoes
738
+ alias_attribute :ISSQNtot_vOutro, :total_servicos_outras_retencoes
739
+ validates :total_servicos_outras_retencoes, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
740
+
741
+ # VALOR TOTAL DESCONTO INCONDICIONADO
742
+ #
743
+ # <b>Type: </b> _Float_
744
+ # <b>Required: </b> _No_
745
+ # <b>Example: </b> _178.46_
746
+ # <b>Length: </b> _13v2_
747
+ # <b>tag: </b> total/ISSQNtot/vDescIncond
748
+ #
749
+ attr_accessor :total_servicos_desconto_incondicionado
750
+ alias_attribute :ISSQNtot_vDescIncond, :total_servicos_desconto_incondicionado
751
+ validates :total_servicos_desconto_incondicionado, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
752
+
753
+ # VALOR TOTAL DESCONTO CONDICIONADO
754
+ #
755
+ # <b>Type: </b> _Float_
756
+ # <b>Required: </b> _No_
757
+ # <b>Example: </b> _178.46_
758
+ # <b>Length: </b> _13v2_
759
+ # <b>tag: </b> total/ISSQNtot/vDescCond
760
+ #
761
+ attr_accessor :total_servicos_desconto_condicionado
762
+ alias_attribute :ISSQNtot_vDescCond, :total_servicos_desconto_condicionado
763
+ validates :total_servicos_desconto_condicionado, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
764
+
765
+ # VALOR TOTAL RETENÇÃO ISS
766
+ #
767
+ # <b>Type: </b> _Float_
768
+ # <b>Required: </b> _No_
769
+ # <b>Example: </b> _178.46_
770
+ # <b>Length: </b> _13v2_
771
+ # <b>tag: </b> total/ISSQNtot/vISSRet
772
+ #
773
+ attr_accessor :total_servicos_iss_retido
774
+ alias_attribute :ISSQNtot_vISSRet, :total_servicos_iss_retido
775
+ validates :total_servicos_iss_retido, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
776
+
777
+ # CÓDIGO DO REGIME ESPECIAL DE TRIBUTAÇÃO
778
+ # 1 = Microempresa Municipal;
779
+ # 2 = Estimativa;
780
+ # 3 = Sociedade de Profissionais;
781
+ # 4 = Cooperativa;
782
+ # 5 = Microempresário Individual (MEI);
783
+ # 6 = Microempresário e Empresa de Pequeno Porte (ME/EPP)
784
+ #
785
+ # <b>Type: </b> _Number_
786
+ # <b>Required: </b> _No_
787
+ # <b>Example: </b> _2_
788
+ # <b>Default: </b> _1_
789
+ # <b>Length: </b> _1_
790
+ # <b>tag: </b> total/ISSQNtot/cRegTrib
791
+ #
792
+ attr_accessor :regime_tributario_servico
793
+ def regime_tributario_servico
794
+ @regime_tributario_servico.to_i if @regime_tributario_servico.present?
795
+ end
796
+ alias_attribute :ISSQNtot_cRegTrib, :regime_tributario_servico
797
+ validates :regime_tributario_servico, inclusion: {in: [1,2,3,4,5,6]}
798
+ ##########################################################################
799
+ ######################### TOTAIS DAS RETENÇÕES #########################
800
+ # VALOR RETIDO DE PIS
801
+ #
802
+ # <b>Type: </b> _Float_
803
+ # <b>Required: </b> _No_
804
+ # <b>Example: </b> _178.46_
805
+ # <b>Length: </b> _13v2_
806
+ # <b>tag: </b> total/retTrib/vRetPIS
807
+ #
808
+ attr_accessor :total_retencao_pis
809
+ alias_attribute :retTrib_vRetPIS, :total_retencao_pis
810
+ validates :total_retencao_pis, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
811
+
812
+ # VALOR RETIDO DE COFINS
813
+ #
814
+ # <b>Type: </b> _Float_
815
+ # <b>Required: </b> _No_
816
+ # <b>Example: </b> _178.46_
817
+ # <b>Length: </b> _13v2_
818
+ # <b>tag: </b> total/retTrib/vRetCOFINS
819
+ #
820
+ attr_accessor :total_retencao_cofins
821
+ alias_attribute :retTrib_vRetCOFINS, :total_retencao_cofins
822
+ validates :total_retencao_cofins, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
823
+
824
+ # VALOR RETIDO DE CSLL
825
+ #
826
+ # <b>Type: </b> _Float_
827
+ # <b>Required: </b> _No_
828
+ # <b>Example: </b> _178.46_
829
+ # <b>Length: </b> _13v2_
830
+ # <b>tag: </b> total/retTrib/vRetCSLL
831
+ #
832
+ attr_accessor :total_retencao_csll
833
+ alias_attribute :retTrib_vRetCSLL, :total_retencao_csll
834
+ validates :total_retencao_csll, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
835
+
836
+ # BASE DE CÁLCULO DO IRRF
837
+ #
838
+ # <b>Type: </b> _Float_
839
+ # <b>Required: </b> _No_
840
+ # <b>Example: </b> _178.46_
841
+ # <b>Length: </b> _13v2_
842
+ # <b>tag: </b> total/retTrib/vBCIRRF
843
+ #
844
+ attr_accessor :total_retencao_base_calculo_irrf
845
+ alias_attribute :retTrib_vBCIRRF, :total_retencao_base_calculo_irrf
846
+ validates :total_retencao_base_calculo_irrf, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
847
+
848
+ # VALOR RETIDO DO IRRF
849
+ #
850
+ # <b>Type: </b> _Float_
851
+ # <b>Required: </b> _No_
852
+ # <b>Example: </b> _178.46_
853
+ # <b>Length: </b> _13v2_
854
+ # <b>tag: </b> total/retTrib/vIRRF
855
+ #
856
+ attr_accessor :total_retencao_irrf
857
+ alias_attribute :retTrib_vIRRF, :total_retencao_irrf
858
+ validates :total_retencao_irrf, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
859
+
860
+ # BASE DE CÁLCULO DA RETENÇÃO DA PREVIDÊNCIA SOCIAL
861
+ #
862
+ # <b>Type: </b> _Float_
863
+ # <b>Required: </b> _No_
864
+ # <b>Example: </b> _178.46_
865
+ # <b>Length: </b> _13v2_
866
+ # <b>tag: </b> total/retTrib/vBCRetPrev
867
+ #
868
+ attr_accessor :total_retencao_base_calculo_previdencia
869
+ alias_attribute :retTrib_vBCRetPrev, :total_retencao_base_calculo_previdencia
870
+ validates :total_retencao_base_calculo_previdencia, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
871
+
872
+ # VALOR DA RETENÇÃO DA PREVIDÊNCIA SOCIAL
873
+ #
874
+ # <b>Type: </b> _Float_
875
+ # <b>Required: </b> _No_
876
+ # <b>Example: </b> _178.46_
877
+ # <b>Length: </b> _13v2_
878
+ # <b>tag: </b> total/retTrib/vRetPrev
879
+ #
880
+ attr_accessor :total_retencao_previdencia
881
+ alias_attribute :retTrib_vRetPrev, :total_retencao_previdencia
882
+ validates :total_retencao_previdencia, numericality: {greater_than_or_equal_to: 0.0}, allow_blank: true
883
+ ##########################################################################
884
+ ######################## INFORMAÇÕES ADICIONAIS ########################
885
+ # INFORMAÇÕES ADICIONAIS DE INTERESSE DO FISCO
886
+ #
887
+ # <b>Type: </b> _String_
888
+ # <b>Required: </b> _No_
889
+ # <b>Default: </b> _nil_
890
+ # <b>Length: </b> _max: 2000_
891
+ # <b>tag: </b> infAdic/infAdFisco
892
+ #
893
+ attr_accessor :informacoes_fisco
894
+ alias_attribute :infAdFisco, :informacoes_fisco
895
+
896
+ # INFORMAÇÕES COMPLEMENTARES DE INTERESSE DO CONTRIBUINTE
897
+ #
898
+ # <b>Type: </b> _String_
899
+ # <b>Required: </b> _No_
900
+ # <b>Default: </b> _nil_
901
+ # <b>Length: </b> _max: 5000_
902
+ # <b>tag: </b> infAdic/infCpl
903
+ #
904
+ attr_accessor :informacoes_contribuinte
905
+ alias_attribute :infCpl, :informacoes_contribuinte
906
+
907
+ # GRUPO PROCESSO REFERENCIADO
908
+ # (NT 2012/003)
909
+ #
910
+ # <b>Type: </b> _BrNfe.processo_referencia_product_class (BrNfe::Product::Nfe::ProcessoReferencia)_
911
+ # <b>Default: </b> _[]_
912
+ # <b>Length: </b> _max: 100_
913
+ # <b>tag: </b> procRef
914
+ #
915
+ has_many :processos_referenciados, 'BrNfe.processo_referencia_product_class'
916
+ alias_attribute :procRef, :processos_referenciados
917
+ ##########################################################################
918
+ ###################### INFORMAÇÕES DE EXPORTAÇÃO #######################
919
+ # SIGLA DA UF DE EMBARQUE OU DE TRANSPOSIÇÃO DE FRONTEIRA
920
+ # Não aceita o valor "EX"
921
+ #
922
+ # <b>Type: </b> _String_
923
+ # <b>Required: </b> _No_
924
+ # <b>Default: </b> _nil_
925
+ # <b>Length: </b> _2_
926
+ # <b>tag: </b> exporta/UFSaidaPais
927
+ #
928
+ attr_accessor :exportacao_uf_saida
929
+ alias_attribute :UFSaidaPais, :exportacao_uf_saida
930
+ validates :exportacao_uf_saida, inclusion: {in: BrNfe::Constants::SIGLAS_UF-['EX'] }, allow_blank: true
931
+
932
+ # DESCRIÇÃO DO LOCAL DE EMBARQUE OU DE TRANSPOSIÇÃO DE FRONTEIRA
933
+ #
934
+ # <b>Type: </b> _String_
935
+ # <b>Required: </b> _No_
936
+ # <b>Default: </b> _nil_
937
+ # <b>Length: </b> _max: 60_
938
+ # <b>tag: </b> exporta/xLocExporta
939
+ #
940
+ attr_accessor :exportacao_local_embarque
941
+ alias_attribute :xLocExporta, :exportacao_local_embarque
942
+
943
+ # DESCRIÇÃO DO LOCAL DE DESPACHO
944
+ # Informação do Recinto Alfandegado
945
+ #
946
+ # <b>Type: </b> _String_
947
+ # <b>Required: </b> _No_
948
+ # <b>Default: </b> _nil_
949
+ # <b>Length: </b> _max: 60_
950
+ # <b>tag: </b> exporta/xLocDespacho
951
+ #
952
+ attr_accessor :exportacao_local_despacho
953
+ alias_attribute :xLocDespacho, :exportacao_local_despacho
954
+
955
+ ############################################################################
956
+ ######################### DADOS SETADOS NO RETORNO #######################
957
+ # Utilizado para setar o XML da nfe na resposta
958
+ attr_accessor :xml
959
+
960
+ # PROTOCOLO / NÚMERO DO RECIBO
961
+ # Número do Recibo gerado pelo Portal da
962
+ # Secretaria de Fazenda Estadual
963
+ #
964
+ attr_accessor :protocol
965
+ alias_attribute :nProt, :protocol
966
+
967
+ # VALOR DIGEST DO RETORNO
968
+ # Digest Value da NF-e processada
969
+ # Utilizado para conferir a integridade da NFe
970
+ # original.
971
+ #
972
+ attr_accessor :digest_value
973
+ alias_attribute :digVal, :digest_value
974
+
975
+ # DATA E HORA DO PROCESSAMENTO DA REQUISIÇÃO
976
+ #
977
+ attr_accessor :processed_at
978
+ def processed_at
979
+ convert_to_time(@processed_at)
980
+ end
981
+ alias_attribute :dhRecbto, :processed_at
982
+
983
+ # STATUS DA OPERAÇÃO
984
+ # Esse é o status final da operação com anota fiscal.
985
+ # A partir do status é possível identificar se obteve sucesso
986
+ # no processamento da nota (para qualquer operação)
987
+ #
988
+ attr_accessor :status_code
989
+ attr_accessor :status_motive
990
+ def status
991
+ if "#{status_code} ".strip.in?( BrNfe::Constants::NFE_STATUS_SUCCESS )
992
+ :success
993
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_PROCESSING )
994
+ :processing
995
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_OFFLINE )
996
+ :offline
997
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_DENIED )
998
+ :denied
999
+ elsif status_code.present?
1000
+ :error
1001
+ end
1002
+ end
1003
+
1004
+ # SITUAÇÃO DA NOTA FISCAL
1005
+ # Informa o status atual da nota fiscal.
1006
+ # Retorna se a nota fiscal está autorizada, cancelada, denegada, rejeitada, ajustada.
1007
+ # Exemplo:
1008
+ # - :authorized - Quando a nota fiscal está autorizada para uso
1009
+ # - :adjusted - Quando a nota fiscal está autorizada para o uso e foi realizado algum
1010
+ # evento posterior que a mesma foi ajustada
1011
+ # - :draft - Quando a nota fiscal ainda não tem validade fiscal.
1012
+ # - :canceled - Quando a nota fiscal foi cancelada.
1013
+ # - :denied - Quando a nota fiscal foi denegada e o XML deve ser guardado.
1014
+ # - :rejected - Quando a nota fiscal foi rejeitada e pode ser enviada novamente com as correções.
1015
+ #
1016
+ attr_accessor :situation
1017
+ def situation
1018
+ @situation ||= get_situation_by_status_code
1019
+ end
1020
+ def get_situation_by_status_code
1021
+ if "#{status_code}".strip.in?( BrNfe::Constants::NFE_SITUATION_AUTORIZED )
1022
+ :authorized
1023
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_SITUATION_ADJUSTED )
1024
+ :adjusted
1025
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_SITUATION_CANCELED )
1026
+ :canceled
1027
+ elsif "#{status_code}".strip.in?( BrNfe::Constants::NFE_SITUATION_DENIED )
1028
+ :denied
1029
+ elsif status_code.blank? || "#{status_code}".strip.in?( BrNfe::Constants::NFE_SITUATION_DRAFT )
1030
+ :draft
1031
+ else
1032
+ :rejected
1033
+ end
1034
+ end
1035
+
1036
+ def default_values
1037
+ {
1038
+ versao_aplicativo: 0,
1039
+ natureza_operacao: 'Venda',
1040
+ forma_pagamento: 0, # 0=À vista
1041
+ modelo_nf: 55, #NF-e
1042
+ data_hora_emissao: Time.current.in_time_zone,
1043
+ data_hora_expedicao: Time.current.in_time_zone,
1044
+ tipo_operacao: 1, # 1=Saída
1045
+ tipo_impressao: 1, # 1=DANFE normal, Retrato;
1046
+ finalidade_emissao: 1, # 1=NF-e normal;
1047
+ presenca_comprador: 9, # 9=Operação não presencial, outros.
1048
+ processo_emissao: 0, # 0=Emissão de NF-e com aplicativo do contribuinte;
1049
+ codigo_tipo_emissao: 1, # 1=Normal
1050
+ servicos_data_prestacao: Date.current,
1051
+ regime_tributario_servico: 1, # 1=Microempresa Municipal;
1052
+ }
1053
+ end
1054
+
1055
+ validates :codigo_tipo_emissao, presence: true
1056
+ validates :codigo_tipo_emissao, inclusion: [1, 6, 7, 9, '1', '6', '7', '9']
1057
+
1058
+ validates :codigo_nf, presence: true
1059
+ validates :codigo_nf, numericality: { only_integer: true }
1060
+ validates :codigo_nf, length: { maximum: 8 }
1061
+
1062
+ validates :serie, presence: true
1063
+ validates :serie, numericality: { only_integer: true }
1064
+ validates :serie, length: { maximum: 3 }
1065
+ validates :serie, exclusion: [890, 899, 990, 999, '890', '899', '990', '999']
1066
+
1067
+ validates :numero_nf, presence: true
1068
+ validates :numero_nf, numericality: { only_integer: true }
1069
+ validates :numero_nf, length: { maximum: 9 }
1070
+
1071
+ validates :natureza_operacao, presence: true
1072
+
1073
+ validates :forma_pagamento, presence: true
1074
+ validates :forma_pagamento, inclusion: [0, 1, 2, '0', '1', '2']
1075
+
1076
+ validates :modelo_nf, presence: true
1077
+ validates :modelo_nf, inclusion: [55, 65, '55', '65']
1078
+
1079
+ validates :data_hora_emissao, presence: true
1080
+ validates :data_hora_expedicao, presence: true, if: :nfe?
1081
+
1082
+ validates :tipo_operacao, presence: true
1083
+ validates :tipo_operacao, inclusion: [0, 1, '0', '1']
1084
+
1085
+ validates :tipo_impressao, presence: true
1086
+ validates :tipo_impressao, inclusion: [0, 1, 2, 3, 4, 5, '0', '1', '2', '3', '4', '5']
1087
+
1088
+ validates :presenca_comprador, presence: true
1089
+ validates :presenca_comprador, inclusion: [0, 1, 2, 3, 4, 9, '0', '1', '2', '3', '4', '9']
1090
+
1091
+ validates :processo_emissao, presence: true
1092
+ validates :processo_emissao, inclusion: [0, 1, 2, 3, '0', '1', '2', '3']
1093
+
1094
+ validates :autorizados_download_xml, length: { maximum: 10 }
1095
+
1096
+ validate_has_many :itens, message: :invalid_item
1097
+ validates :itens, length: {minimum: 1, maximum: 990}
1098
+
1099
+ validate_has_many :processos_referenciados, message: :invalid_processo
1100
+
1101
+ with_options if: :nfce? do |record|
1102
+ record.validate_has_many :pagamentos
1103
+ record.validates :pagamentos, length: {maximum: 100}
1104
+ end
1105
+
1106
+ validate_has_one :transporte
1107
+ validate_has_one :fatura
1108
+ validate_has_one :destinatario
1109
+ validate_has_one :emitente
1110
+
1111
+ validate_has_one :endereco_retirada
1112
+ with_options if: :endereco_retirada do |record|
1113
+ record.validates :endereco_retirada_cpf_cnpj, presence: true
1114
+ record.validates :endereco_retirada_cpf_cnpj, length: {maximum: 14}
1115
+ end
1116
+
1117
+ validate_has_one :endereco_entrega
1118
+ with_options if: :endereco_entrega do |record|
1119
+ record.validates :endereco_entrega_cpf_cnpj, presence: true
1120
+ record.validates :endereco_entrega_cpf_cnpj, length: {maximum: 14}
1121
+ end
1122
+
1123
+ def nfe?
1124
+ modelo_nf.to_i == 55
1125
+ end
1126
+
1127
+ def nfce?
1128
+ modelo_nf.to_i == 65
1129
+ end
1130
+
1131
+ def has_any_service?
1132
+ itens.select(&:is_service?).any?
1133
+ end
1134
+
1135
+ def has_any_product?
1136
+ itens.select(&:is_product?).any?
1137
+ end
1138
+
1139
+ # MÉTODO PARA SABER SE EXISTE ALGUM VALOR NO TOTALIZADOR DE RETENÇÃO DE IMPOSTOS.
1140
+ # Utilizado para saber se deve ou não colocar a tag de totalizador de retenções
1141
+ # no XML.
1142
+ #
1143
+ # <b>Tipo: </b> _Boolean_
1144
+ #
1145
+ def has_taxes_retention?
1146
+ total_retencao_pis.to_f > 0.0 || total_retencao_cofins.to_f > 0.0 ||
1147
+ total_retencao_csll.to_f > 0.0 || total_retencao_irrf.to_f > 0.0 ||
1148
+ total_retencao_previdencia.to_f > 0.0
1149
+ end
1150
+
1151
+ private
1152
+
1153
+ ###############################################################################################
1154
+ # | Código | AAMM da | CNPJ do | Modelo | Série | Número | Cód. tipo | Código | DV |
1155
+ # | da UF | emissão | Emitente | | | da NF-e | emissão | Numérico | |
1156
+ # ---------------------------------------------------------------------------------------
1157
+ # Tam = | 02 | 04 | 14 | 02 | 03 | 09 | 01 | 08 | 01 |
1158
+ # °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
1159
+ def gerar_chave_de_acesso!
1160
+ chave_sem_dv = "#{emitente.endereco.codigo_ibge_uf}"
1161
+ chave_sem_dv << "#{data_hora_emissao.try(:strftime, '%y%m')}"
1162
+ chave_sem_dv << "#{emitente.cnpj}".rjust(14,'0')
1163
+ chave_sem_dv << "#{modelo_nf}"
1164
+ chave_sem_dv << "#{serie}".rjust(3, '0')
1165
+ chave_sem_dv << "#{numero_nf}".rjust(9, '0')
1166
+ chave_sem_dv << "#{codigo_tipo_emissao}"
1167
+ chave_sem_dv << "#{codigo_nf}".rjust(8, '0')
1168
+ dv = BrNfe::Calculos::Modulo11FatorDe2a9RestoZero.new(chave_sem_dv)
1169
+ "#{chave_sem_dv}#{dv}"
1170
+ end
1171
+ end
1172
+ end
1173
+ end