br_nfe 2.1.0 → 2.1.1

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 (257) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +0 -1
  4. data/Gemfile.lock +1 -1
  5. data/README.markdown +264 -106
  6. data/lib/br_nfe/{helper → association}/have_address.rb +1 -1
  7. data/lib/br_nfe/{helper → association}/have_condicao_pagamento.rb +1 -1
  8. data/lib/br_nfe/association/have_destinatario.rb +22 -0
  9. data/lib/br_nfe/association/have_emitente.rb +24 -0
  10. data/lib/br_nfe/base.rb +37 -27
  11. data/lib/br_nfe/condicao_pagamento.rb +2 -0
  12. data/lib/br_nfe/constants.rb +33 -0
  13. data/lib/br_nfe/endereco.rb +10 -0
  14. data/lib/br_nfe/helper/string_methods.rb +4 -0
  15. data/lib/br_nfe/{emitente.rb → person.rb} +11 -7
  16. data/lib/br_nfe/product/base.rb +82 -0
  17. data/lib/br_nfe/product/consulta_status_servico.rb +35 -0
  18. data/lib/br_nfe/product/emitente.rb +8 -0
  19. data/lib/br_nfe/product/gateway/base.rb +62 -0
  20. data/lib/br_nfe/product/gateway/web_service_svrs.rb +39 -0
  21. data/lib/br_nfe/product/value_nf.rb +9 -0
  22. data/lib/br_nfe/product/xml/soap_env.xml.slim +8 -0
  23. data/lib/br_nfe/product/xml/v3_10/XSD/consReciNFe_v3.10.xsd +9 -0
  24. data/lib/br_nfe/product/xml/v3_10/XSD/consSitNFe_v3.10.xsd +9 -0
  25. data/lib/br_nfe/product/xml/v3_10/XSD/consStatServ_v3.10.xsd +9 -0
  26. data/lib/br_nfe/product/xml/v3_10/XSD/enviNFe_v3.10.xsd +9 -0
  27. data/lib/br_nfe/product/xml/v3_10/XSD/inutNFe_v3.10.xsd +9 -0
  28. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsSitNFe_v3.10.xsd +502 -0
  29. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsStatServ_v3.10.xsd +98 -0
  30. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteInutNFe_v3.10.xsd +193 -0
  31. data/lib/br_nfe/product/xml/v3_10/XSD/leiauteNFe_v3.10.xsd +6060 -0
  32. data/lib/br_nfe/product/xml/v3_10/XSD/nfe_v3.10.xsd +9 -0
  33. data/lib/br_nfe/product/xml/v3_10/XSD/procInutNFe_v3.10.xsd +9 -0
  34. data/lib/br_nfe/product/xml/v3_10/XSD/procNFe_v3.10.xsd +9 -0
  35. data/lib/br_nfe/product/xml/v3_10/XSD/retConsReciNFe_v3.10.xsd +9 -0
  36. data/lib/br_nfe/product/xml/v3_10/XSD/retConsSitNFe_v3.10.xsd +9 -0
  37. data/lib/br_nfe/product/xml/v3_10/XSD/retConsStatServ_v3.10.xsd +9 -0
  38. data/lib/br_nfe/product/xml/v3_10/XSD/retEnviNFe_v3.10.xsd +9 -0
  39. data/lib/br_nfe/product/xml/v3_10/XSD/retInutNFe_v3.10.xsd +9 -0
  40. data/lib/br_nfe/product/xml/v3_10/XSD/tiposBasico_v3.10.xsd +571 -0
  41. data/lib/br_nfe/product/xml/v3_10/XSD/xmldsig-core-schema_v1.01.xsd +98 -0
  42. data/lib/br_nfe/product/xml/v3_10/consulta_status_servico.xml.slim +4 -0
  43. data/lib/br_nfe/service/association/have_intermediario.rb +26 -0
  44. data/lib/br_nfe/service/association/have_rps.rb +36 -0
  45. data/lib/br_nfe/service/base.rb +24 -20
  46. data/lib/br_nfe/service/betha/v1/cancela_nfse.rb +43 -0
  47. data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +20 -6
  48. data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +17 -6
  49. data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +16 -5
  50. data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +15 -6
  51. data/lib/br_nfe/service/betha/v1/gateway.rb +4 -0
  52. data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +13 -5
  53. data/lib/br_nfe/service/betha/v1/xml/_tc_identificacao_prestador.xml.slim +3 -0
  54. data/lib/br_nfe/service/betha/v1/xml/_tc_pedido_cancelamento.xml.slim +4 -0
  55. data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +8 -0
  56. data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +1 -1
  57. data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +5 -2
  58. data/lib/br_nfe/service/concerns/values_ts/service_v1.rb +319 -0
  59. data/lib/br_nfe/service/destinatario.rb +7 -0
  60. data/lib/br_nfe/service/emitente.rb +8 -0
  61. data/lib/br_nfe/service/intermediario.rb +1 -12
  62. data/lib/br_nfe/service/item.rb +7 -7
  63. data/lib/br_nfe/service/response/build/base.rb +166 -0
  64. data/lib/br_nfe/service/response/build/cancelamento.rb +62 -0
  65. data/lib/br_nfe/service/response/build/consulta_lote_rps.rb +25 -0
  66. data/lib/br_nfe/service/response/build/consulta_nfs_por_rps.rb +25 -0
  67. data/lib/br_nfe/service/response/build/consulta_nfse.rb +24 -0
  68. data/lib/br_nfe/service/response/build/consulta_situacao_lote_rps.rb +56 -0
  69. data/lib/br_nfe/service/response/build/invoice_build.rb +359 -0
  70. data/lib/br_nfe/service/response/build/recepcao_lote_rps.rb +69 -0
  71. data/lib/br_nfe/service/response/cancelamento.rb +22 -0
  72. data/lib/br_nfe/service/response/consulta_lote_rps.rb +18 -0
  73. data/lib/br_nfe/service/response/consulta_nfs_por_rps.rb +10 -0
  74. data/lib/br_nfe/service/response/consulta_nfse.rb +10 -0
  75. data/lib/br_nfe/service/response/consulta_situacao_lote_rps.rb +74 -0
  76. data/lib/br_nfe/service/response/default.rb +93 -0
  77. data/lib/br_nfe/{response/service → service/response}/nota_fiscal.rb +19 -12
  78. data/lib/br_nfe/service/response/paths/v1/tc_nfse.rb +275 -0
  79. data/lib/br_nfe/service/response/recepcao_lote_rps.rb +35 -0
  80. data/lib/br_nfe/service/rps.rb +30 -27
  81. data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +4 -4
  82. data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +4 -4
  83. data/lib/br_nfe/service/simpliss/v1/cancela_nfse.rb +16 -6
  84. data/lib/br_nfe/service/simpliss/v1/consulta_lote_rps.rb +20 -12
  85. data/lib/br_nfe/service/simpliss/v1/consulta_nfs_por_rps.rb +21 -6
  86. data/lib/br_nfe/service/simpliss/v1/consulta_nfse.rb +20 -6
  87. data/lib/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps.rb +17 -6
  88. data/lib/br_nfe/service/simpliss/v1/recepcao_lote_rps.rb +16 -4
  89. data/lib/br_nfe/service/simpliss/v1/xml/_tc_item_servico.xml.slim +2 -2
  90. data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +21 -19
  91. data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +21 -19
  92. data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +25 -18
  93. data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +20 -20
  94. data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +14 -20
  95. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +11 -16
  96. data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -6
  97. data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +1 -1
  98. data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +1 -1
  99. data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +11 -11
  100. data/lib/br_nfe/version.rb +1 -1
  101. data/lib/br_nfe.rb +62 -62
  102. data/test/br_nfe/association/have_address_test.rb +64 -0
  103. data/test/br_nfe/association/have_condicao_pagamento_test.rb +75 -0
  104. data/test/br_nfe/association/have_destinatario_test.rb +76 -0
  105. data/test/br_nfe/association/have_emitente_test.rb +80 -0
  106. data/test/br_nfe/base_test.rb +96 -61
  107. data/test/br_nfe/endereco_test.rb +21 -0
  108. data/test/br_nfe/person_test.rb +55 -0
  109. data/test/br_nfe/product/base_test.rb +150 -0
  110. data/test/br_nfe/product/consulta_status_servico_test.rb +59 -0
  111. data/test/br_nfe/product/emitente_test.rb +29 -0
  112. data/test/br_nfe/product/gateway/base_test.rb +16 -0
  113. data/test/br_nfe/product/gateway/web_service_svrs_test.rb +36 -0
  114. data/test/br_nfe/service/association/have_intermediario_test.rb +80 -0
  115. data/test/br_nfe/service/association/have_rps_test.rb +62 -0
  116. data/test/br_nfe/service/base_test.rb +42 -42
  117. data/test/br_nfe/service/betha/v1/cancela_nfse_test.rb +90 -0
  118. data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +105 -5
  119. data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +103 -5
  120. data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +114 -5
  121. data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +118 -5
  122. data/test/br_nfe/service/betha/v1/gateway_test.rb +1 -1
  123. data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +51 -5
  124. data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +2 -2
  125. data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +2 -7
  126. data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +24 -3
  127. data/test/br_nfe/service/concerns/rules/recepcao_lote_rps_test.rb +1 -1
  128. data/test/br_nfe/{helper → service/concerns}/values_ts/service_v1_test.rb +2 -2
  129. data/test/br_nfe/{destinatario_test.rb → service/destinatario_test.rb} +3 -4
  130. data/test/br_nfe/service/emitente_test.rb +29 -0
  131. data/test/br_nfe/service/item_test.rb +14 -14
  132. data/test/br_nfe/service/response/build/base_test.rb +80 -0
  133. data/test/br_nfe/{response/service → service/response}/default_test.rb +1 -82
  134. data/test/br_nfe/service/response/nota_fiscal_test.rb +59 -0
  135. data/test/br_nfe/{response/service → service/response}/paths/v1/tc_nfse_test.rb +10 -10
  136. data/test/br_nfe/service/rps_test.rb +107 -138
  137. data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +9 -9
  138. data/test/br_nfe/service/simpliss/v1/base_test.rb +1 -1
  139. data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +7 -10
  140. data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +11 -18
  141. data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +11 -18
  142. data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +11 -18
  143. data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +7 -11
  144. data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +3 -9
  145. data/test/br_nfe/service/thema/v1/base_test.rb +1 -1
  146. data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +7 -14
  147. data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +6 -17
  148. data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +6 -13
  149. data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +11 -18
  150. data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +7 -11
  151. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +1 -5
  152. data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +3 -9
  153. data/test/factories/base.rb +0 -1
  154. data/test/factories/{emitente.rb → person.rb} +1 -1
  155. data/test/factories/product/base.rb +12 -0
  156. data/test/factories/product/consulta_status_servico.rb +12 -0
  157. data/test/factories/product/emitente.rb +15 -0
  158. data/test/factories/product/gateway/base.rb +5 -0
  159. data/test/factories/product/gateway/web_service_svrs.rb +5 -0
  160. data/test/factories/service/betha/v1/{cancelamento_nfs.rb → cancela_nfse.rb} +2 -1
  161. data/test/factories/service/betha/v1/consulta_lote_rps.rb +1 -1
  162. data/test/factories/service/betha/v1/consulta_nfs_por_rps.rb +1 -1
  163. data/test/factories/service/betha/v1/consulta_nfse.rb +1 -1
  164. data/test/factories/service/betha/v1/consulta_situacao_lote_rps.rb +1 -1
  165. data/test/factories/{destinatario.rb → service/destinatario.rb} +1 -1
  166. data/test/factories/service/emitente.rb +15 -0
  167. data/test/factories/service/item.rb +4 -4
  168. data/test/factories/service/response/build_response.rb +5 -0
  169. data/test/factories/service/response/default.rb +6 -0
  170. data/test/factories/{response/service → service/response}/nota_fiscal.rb +8 -8
  171. data/test/factories/service/rps.rb +11 -11
  172. data/test/factories/service/sc/florianopolis/base.rb +1 -1
  173. data/test/factories/service/sc/florianopolis/cancellation.rb +1 -1
  174. data/test/factories/service/sc/florianopolis/emission_rps.rb +1 -1
  175. data/test/factories/service/simpliss/v1/base.rb +1 -1
  176. data/test/factories/service/simpliss/v1/cancela_nfse.rb +1 -1
  177. data/test/factories/service/simpliss/v1/consulta_lote_rps.rb +1 -1
  178. data/test/factories/service/simpliss/v1/consulta_nfs_por_rps.rb +1 -1
  179. data/test/factories/service/simpliss/v1/consulta_nfse.rb +1 -1
  180. data/test/factories/service/simpliss/v1/consulta_situacao_lote_rps.rb +1 -1
  181. data/test/factories/service/simpliss/v1/recepcao_lote_rps.rb +1 -1
  182. data/test/factories/service/thema/v1/base.rb +1 -1
  183. data/test/factories/service/thema/v1/cancela_nfse.rb +1 -1
  184. data/test/factories/service/thema/v1/consulta_lote_rps.rb +1 -1
  185. data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +1 -1
  186. data/test/factories/service/thema/v1/consulta_nfse.rb +1 -1
  187. data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +1 -1
  188. data/test/factories/service/thema/v1/recepcao_lote_rps.rb +1 -1
  189. data/test/fixtures/service/response/betha/v1/cancela_nfse/fault.xml +17 -0
  190. data/test/fixtures/service/response/betha/v1/cancela_nfse/success.xml +48 -0
  191. data/test/fixtures/service/response/betha/v1/consulta_lote_rps/fault.xml +18 -0
  192. data/test/fixtures/service/response/betha/v1/consulta_lote_rps/success.xml +108 -0
  193. data/test/fixtures/service/response/betha/v1/consulta_nfse/fault.xml +18 -0
  194. data/test/fixtures/service/response/betha/v1/consulta_nfse/nfs_empty.xml +12 -0
  195. data/test/fixtures/service/response/betha/v1/consulta_nfse/success.xml +115 -0
  196. data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/fault.xml +18 -0
  197. data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/success.xml +103 -0
  198. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/error.xml +13 -0
  199. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/fault.xml +17 -0
  200. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/success.xml +13 -0
  201. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed.xml +13 -0
  202. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed_by_code_error.xml +17 -0
  203. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived.xml +13 -0
  204. data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived_by_code_error.xml +17 -0
  205. data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/error.xml +17 -0
  206. data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/success.xml +14 -0
  207. metadata +160 -94
  208. data/lib/br_nfe/destinatario.rb +0 -26
  209. data/lib/br_nfe/helper/have_destinatario.rb +0 -18
  210. data/lib/br_nfe/helper/have_emitente.rb +0 -20
  211. data/lib/br_nfe/helper/have_intermediario.rb +0 -24
  212. data/lib/br_nfe/helper/have_rps.rb +0 -34
  213. data/lib/br_nfe/helper/values_ts/service_v1.rb +0 -317
  214. data/lib/br_nfe/response/service/build_response.rb +0 -463
  215. data/lib/br_nfe/response/service/default.rb +0 -185
  216. data/lib/br_nfe/response/service/paths/base.rb +0 -127
  217. data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +0 -22
  218. data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +0 -25
  219. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +0 -25
  220. data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +0 -25
  221. data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
  222. data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +0 -36
  223. data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +0 -271
  224. data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +0 -36
  225. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -23
  226. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -21
  227. data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -21
  228. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -22
  229. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -25
  230. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -25
  231. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -25
  232. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
  233. data/lib/br_nfe/service/simpliss/v1/response_paths/servico_enviar_lote_rps_resposta.rb +0 -36
  234. data/lib/br_nfe/service/thema/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -17
  235. data/lib/br_nfe/service/thema/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -19
  236. data/test/br_nfe/emitente_test.rb +0 -46
  237. data/test/br_nfe/helper/have_address_test.rb +0 -62
  238. data/test/br_nfe/helper/have_condicao_pagamento_test.rb +0 -71
  239. data/test/br_nfe/helper/have_destinatario_test.rb +0 -64
  240. data/test/br_nfe/helper/have_emitente_test.rb +0 -63
  241. data/test/br_nfe/helper/have_intermediario_test.rb +0 -77
  242. data/test/br_nfe/helper/have_rps_test.rb +0 -59
  243. data/test/br_nfe/response/service/build_response_test.rb +0 -205
  244. data/test/br_nfe/response/service/nota_fiscal_test.rb +0 -41
  245. data/test/br_nfe/response/service/paths/base_test.rb +0 -196
  246. data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +0 -25
  247. data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +0 -30
  248. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +0 -30
  249. data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +0 -30
  250. data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +0 -30
  251. data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +0 -34
  252. data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +0 -54
  253. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +0 -16
  254. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +0 -16
  255. data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +0 -16
  256. data/test/factories/response/service/build_response.rb +0 -5
  257. data/test/factories/response/service/default.rb +0 -10
@@ -0,0 +1,319 @@
1
+ module BrNfe
2
+ module Service
3
+ module Concerns
4
+ module ValuesTs
5
+ module ServiceV1
6
+
7
+ # Número da Nota Fiscal de Serviço Eletrônica,
8
+ # formado pelo ano com 04 (quatro) dígitos e um
9
+ # número seqüencial com 11 posições – Formato
10
+ # AAAANNNNNNNNNNN.
11
+ #
12
+ def ts_numero_nfse value
13
+ BrNfe::Helper.only_number(value).max_size(15)
14
+ end
15
+
16
+ # Código de verificação do número da nota
17
+ #
18
+ def ts_codigo_verificacao value
19
+ "#{value}".max_size(9)
20
+ end
21
+
22
+ # Código de status do RPS
23
+ # 1 – Normal
24
+ # 2 – Cancelado
25
+ #
26
+ def ts_status_rps value
27
+ BrNfe::Helper.only_number(value).max_size(1)
28
+ end
29
+
30
+ # Código de status do NFS-e
31
+ # 1 – Normal
32
+ # 2 – Cancelado
33
+ #
34
+ def ts_status_nfse value
35
+ BrNfe::Helper.only_number(value).max_size(1)
36
+ end
37
+
38
+ # Código de natureza da operação
39
+ # 1 – Tributação no município
40
+ # 2 - Tributação fora do município
41
+ # 3 - Isenção
42
+ # 4 - Imune
43
+ # 5 –Exigibilidade suspensa por decisão judicial
44
+ # 6 – Exigibilidade suspensa por procedimento administrativo
45
+ #
46
+ def ts_natureza_operacao value
47
+ BrNfe::Helper.only_number(value).max_size(2)
48
+ end
49
+
50
+ # Código de identificação do regime especial de tributação
51
+ # 1 – Microempresa municipal
52
+ # 2 - Estimativa
53
+ # 3 – Sociedade de profissionais
54
+ # 4 – Cooperativa
55
+ #
56
+ def ts_regime_especial_tributacao value
57
+ BrNfe::Helper.only_number(value).max_size(2)
58
+ end
59
+
60
+ # Identificação de Sim/Não
61
+ # 1 - Sim
62
+ # 2 - Não
63
+ #
64
+ def ts_sim_nao value
65
+ BrNfe.true_values.include?(value) ? '1' : '2'
66
+ end
67
+
68
+ # Quantidade de RPS do Lote
69
+ #
70
+ def ts_quantidade_rps value
71
+ BrNfe::Helper.only_number(value).max_size(4)
72
+ end
73
+
74
+ # Número do RPS
75
+ #
76
+ def ts_numero_rps value
77
+ BrNfe::Helper.only_number(value).max_size(15)
78
+ end
79
+
80
+ # Número de série do RPS
81
+ #
82
+ def ts_serie_rps value
83
+ "#{value}".max_size(5)
84
+ end
85
+
86
+ # Código de tipo de RPS
87
+ # 1 - RPS
88
+ # 2 – Nota Fiscal Conjugada (Mista)
89
+ # 3 – Cupom
90
+ #
91
+ def ts_tipo_rps value
92
+ BrNfe::Helper.only_number(value).max_size(1)
93
+ end
94
+
95
+ # Informações adicionais ao documento.
96
+ #
97
+ def ts_outras_informacoes value
98
+ "#{value}".max_size(255).br_nfe_escape_html
99
+ end
100
+
101
+ # Valor monetário.
102
+ # Formato: 0.00 (ponto separando casa decimal)
103
+ # Ex: 1.234,56 = 1234.56
104
+ # 1.000,00 = 1000.00
105
+ # 1.000,00 = 1000
106
+ #
107
+ def ts_valor value
108
+ value.to_f.round(2) if value.present?
109
+ end
110
+
111
+ # Código de item da lista de serviço
112
+ # Se um serviço for por exemplo: 107 deve ser enviado no formato
113
+ # 1.07
114
+ #
115
+ def ts_item_lista_servico value
116
+ return if value.blank?
117
+ number_only = BrNfe::Helper.only_number(value).max_size(4).to_i.to_s
118
+ number_only.reverse.scan(/.{1,2}/).join('.').reverse
119
+ end
120
+
121
+ # Código CNAE
122
+ #
123
+ def ts_codigo_cnae value
124
+ BrNfe::Helper.only_number(value).max_size(7)
125
+ end
126
+
127
+ # Código de Tributação
128
+ #
129
+ def ts_codigo_tributacao value
130
+ "#{value}".max_size(20)
131
+ end
132
+
133
+ # Alíquota. Valor percentual.
134
+ # Formato: 0.0000
135
+ # Ex: 1% = 1.00
136
+ # 25,5% = 25.5
137
+ # 100% = 100.0000 ou 100
138
+ #
139
+ def ts_aliquota value
140
+ value_monetary(value, 4)
141
+ end
142
+
143
+ # Discriminação do conteúdo da NFS-e
144
+ #
145
+ def ts_discriminacao value
146
+ "#{value}".max_size(2_000).remove_accents.br_nfe_escape_html
147
+ end
148
+
149
+ # Código de identificação do município conforme tabela do IBGE
150
+ #
151
+ def ts_codigo_municipio_ibge value
152
+ BrNfe::Helper.only_number(value).max_size(7)
153
+ end
154
+
155
+ # Número de inscrição municipal
156
+ #
157
+ def ts_inscricao_municipal value
158
+ "#{value}".max_size(15)
159
+ end
160
+
161
+ # Razão Social do contribuinte
162
+ #
163
+ def ts_razao_social value
164
+ "#{value}".max_size(115)
165
+ end
166
+
167
+ # Nome fantasia
168
+ #
169
+ def ts_nome_fantasia value
170
+ "#{value}".max_size(60)
171
+ end
172
+
173
+ # Número CNPJ
174
+ #
175
+ def ts_cnpj value
176
+ "#{BrNfe::Helper::CpfCnpj.new(value).sem_formatacao}".max_size(14)
177
+ end
178
+
179
+ # Endereço / rua
180
+ #
181
+ def ts_endereco value
182
+ "#{value}".max_size(125)
183
+ end
184
+
185
+ # Número do endereço
186
+ #
187
+ def ts_numero_endereco value
188
+ "#{value}".max_size(10)
189
+ end
190
+
191
+ # Complemento de endereço
192
+ #
193
+ def ts_complemento_endereco value
194
+ "#{value}".max_size(60)
195
+ end
196
+
197
+ # Bairro
198
+ #
199
+ def ts_bairro value
200
+ "#{value}".max_size(60)
201
+ end
202
+
203
+ # Sigla da unidade federativa
204
+ #
205
+ def ts_uf value
206
+ "#{value}".max_size(2)
207
+ end
208
+
209
+ # Número do CEP
210
+ #
211
+ def ts_cep value
212
+ BrNfe::Helper.only_number(value).max_size(8).ljust(8, '0') if value.present?
213
+ end
214
+
215
+ # E-mail
216
+ #
217
+ def ts_email value
218
+ "#{value}".max_size(80)
219
+ end
220
+
221
+ # Telefone
222
+ #
223
+ def ts_telefone value
224
+ BrNfe::Helper.only_number(value).max_size(11)
225
+ end
226
+
227
+ # Número CPF
228
+ #
229
+ def ts_cpf value
230
+ "#{BrNfe::Helper::CpfCnpj.new(value).sem_formatacao}".max_size(11)
231
+ end
232
+
233
+ # Indicador de uso de CPF ou CNPJ
234
+ # 1 – CPF
235
+ # 2 – CNPJ
236
+ # 3 – Não Informado
237
+ #
238
+ def ts_indicacao_cpf_cnpj value
239
+ BrNfe::Helper.only_number(value).max_size(1)
240
+ end
241
+
242
+ # Código de Obra
243
+ #
244
+ def ts_codigo_obra value
245
+ "#{value}".max_size(15)
246
+ end
247
+
248
+ # Código ART
249
+ #
250
+ def ts_art value
251
+ "#{value}".max_size(15)
252
+ end
253
+
254
+ # Número do Lote de RPS
255
+ #
256
+ def ts_numero_lote value
257
+ BrNfe::Helper.only_number(value).max_size(15)
258
+ end
259
+
260
+ # Número do protocolo de recebimento do RPS
261
+ #
262
+ def ts_numero_protocolo value
263
+ "#{value}".max_size(50)
264
+ end
265
+
266
+ # Código de situação de lote de RPS
267
+ # 1 – Não Recebido
268
+ # 2 – Não Processado
269
+ # 3 – Processado com Erro
270
+ # 4 – Processado com Sucesso
271
+ #
272
+ def ts_situacao_lote_rps value
273
+ BrNfe::Helper.only_number(value).max_size(1)
274
+ end
275
+
276
+ # Código de mensagem de retorno de serviço.
277
+ #
278
+ def ts_codigo_mensagem_alerta value
279
+ "#{value}".max_size(4)
280
+ end
281
+
282
+ # Descrição da mensagem de retorno de serviço.
283
+ #
284
+ def ts_descricao_mensagem_alerta value
285
+ "#{value}".max_size(200)
286
+ end
287
+
288
+ # Código de cancelamento com base na tabela de Erros e alertas.
289
+ #
290
+ def ts_codigo_cancelamento_nfse value
291
+ "#{value}".max_size(4)
292
+ end
293
+
294
+ # Atributo de identificação da tag a ser assinada no documento XML
295
+ #
296
+ def ts_id_tag value
297
+ "#{value}".max_size(255)
298
+ end
299
+
300
+ # Atributo do formato Datetime
301
+ # Não está identificado na documentação porém é utilizado
302
+ # para identificar valores Datetime
303
+ #
304
+ def ts_datetime value
305
+ value_date_time(value)
306
+ end
307
+
308
+ # Atributo do formato Date
309
+ # Não está identificado na documentação porém é utilizado
310
+ # para identificar valores Date
311
+ #
312
+ def ts_date value
313
+ value_date(value)
314
+ end
315
+ end
316
+ end
317
+ end
318
+ end
319
+ end
@@ -0,0 +1,7 @@
1
+ module BrNfe
2
+ module Service
3
+ class Destinatario < BrNfe::Person
4
+ validate :validar_endereco
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module BrNfe
2
+ module Service
3
+ class Emitente < BrNfe::Person
4
+ validates :inscricao_municipal, :natureza_operacao, presence: true
5
+ validate :validar_endereco
6
+ end
7
+ end
8
+ end
@@ -1,17 +1,6 @@
1
1
  module BrNfe
2
2
  module Service
3
- class Intermediario < BrNfe::ActiveModelBase
4
-
5
- attr_accessor :cpf_cnpj
6
- attr_accessor :inscricao_municipal
7
- attr_accessor :razao_social
8
-
9
- validates :cpf_cnpj, :razao_social, presence: true
10
-
11
- def razao_social
12
- "#{@razao_social}".to_valid_format_nf
13
- end
14
-
3
+ class Intermediario < BrNfe::Person
15
4
  end
16
5
  end
17
6
  end
@@ -36,34 +36,34 @@ module BrNfe
36
36
  # Ex: se a aliquita for 7.5% então o valor setado no campo é 0.075
37
37
  #
38
38
  # <b>Tipo: </b> _Float_
39
- attr_accessor :iss_tax_rate
39
+ attr_accessor :iss_aliquota
40
40
 
41
41
  # Valor unitário do item
42
42
  # Refere-se ao valor separado de cada serviço prestado
43
43
  #
44
44
  # <b>Tipo: </b> _Float_
45
- attr_accessor :unit_value
45
+ attr_accessor :valor_unitario
46
46
 
47
47
  # Quantidade prestada de serviços do item
48
48
  #
49
49
  # <b>Tipo: </b> _Float_
50
- attr_accessor :quantity
50
+ attr_accessor :quantidade
51
51
 
52
52
  # Valor total cobrado do item
53
53
  #
54
54
  # <b>Tipo: </b> _Float_
55
- attr_accessor :total_value
55
+ attr_accessor :valor_total
56
56
 
57
57
 
58
58
  def default_values
59
59
  {
60
- quantity: 1.0,
60
+ quantidade: 1.0,
61
61
  }
62
62
  end
63
63
 
64
64
 
65
- def total_value
66
- @total_value || (quantity.to_f * unit_value.to_f)
65
+ def valor_total
66
+ @valor_total || (quantidade.to_f * valor_unitario.to_f)
67
67
  end
68
68
  end
69
69
  end
@@ -0,0 +1,166 @@
1
+ #encoding UTF-8
2
+ module BrNfe
3
+ module Service
4
+ module Response
5
+ module Build
6
+ class Base < BrNfe::ActiveModelBase
7
+ # 1: A resposta da requisição soap
8
+ attr_accessor :savon_response
9
+
10
+ # 2: Um array com o caminho inicial padrão da requisição de retorno
11
+ attr_accessor :keys_root_path
12
+
13
+ # 3: Alguns Webservices trazem dentro do body da resposta SOAp
14
+ # outro XML com as informações necessárias.
15
+ # Quando isso aocntece é preciso converter esse XML para um HASH
16
+ # para que possamos encontrar os valores necessários.
17
+ attr_accessor :body_xml_path
18
+
19
+ # 4: Codificação original do XML de resposta para que seja convertido
20
+ # para UTF-8
21
+ attr_accessor :xml_encode
22
+
23
+ ##############################################################################################################
24
+ ####################### CAMINHOS PARA ENCONTRAR OS VALORES NA RESPOSTA DA REQUISIÇÃO #####################
25
+ # Caminho para encontrar
26
+ attr_accessor :lot_number_path # o numero do lote
27
+ attr_accessor :message_errors_path # local para encontrar as mensagens de erro
28
+ attr_accessor :message_code_key # chave que representa o codigo do erro
29
+ attr_accessor :message_msg_key # chave que representa a mensagem do erro
30
+ attr_accessor :message_solution_key # chave que representa a solução do erro
31
+
32
+ def default_values
33
+ super.merge({
34
+ message_code_key: :codigo,
35
+ message_msg_key: :mensagem,
36
+ message_solution_key: :correcao,
37
+ })
38
+ end
39
+ ####################### FIM DA DEFINIÇÃO DOS CAMINHOS ############################
40
+ ######################################################################################
41
+
42
+ def response
43
+ raise "O método #response deve ser implementado na classe #{self.class}"
44
+ end
45
+
46
+ # Retorna o valor encontrado no body da resposta Savon
47
+ # em formato de hash
48
+ #
49
+ # <b>Tipo de retorno: </b> _Hash_
50
+ #
51
+ def savon_body
52
+ return @savon_body if @savon_body.present?
53
+ if body_xml_path.present?
54
+ @savon_body = Nori.new.parse(
55
+ body_converted_to_xml
56
+ ).deep_transform_keys!{|k| k.to_s.underscore.to_sym}
57
+ else
58
+ @savon_body = savon_response.try(:body) || {}
59
+ end
60
+ end
61
+
62
+ # Converte o body da requisição em XML (String)
63
+ # Isso é necessário quando dentro do body vem a resposta com outro XML
64
+ #
65
+ # <b>Tipo de retorno: </b> _String_
66
+ #
67
+ def body_converted_to_xml
68
+ @body_converted_to_xml ||= canonicalize("#{find_value_for_keys(savon_response.try(:body), body_xml_path)}".encode(xml_encode).force_encoding('UTF-8'))
69
+ end
70
+
71
+ # Método utilizado para encontrar valores em um Hash
72
+ # passando o caminho do valor em um array onde contém as chaves
73
+ # ordenadas.
74
+ # Recebe 2 parêmntros:
75
+ # 1º um o hash onde contém o valor a ser encontrado
76
+ # 2º um array com as chaves em sequencia formando o caminho para encontrar o valor.
77
+ #
78
+ # A funcionalidade desse método funciona parecido com o `.dig` da classe Hash do
79
+ # Ruby 2.3.0.
80
+ # A diferença é que no caso de exmeplo a seguir não apresenta uma excessão par ao usuário
81
+ # hash = {v1: {v2: 'valor string'}}
82
+ # hash.dig(:v1, :v2, :v3) <- Dá erro
83
+ # find_value_for_keys(hash, [:v1, :v2, :v3] <- Retorna nil e não da erro
84
+ #
85
+ # <b>Tipo de retorno: </b> _Anything_
86
+ #
87
+ def find_value_for_keys(hash, keys)
88
+ return if keys.blank?
89
+ keys = [keys] unless keys.is_a?(Array)
90
+
91
+ result = hash
92
+ keys.each do |key|
93
+ if result.is_a?(Hash)
94
+ result = result[key]
95
+ else
96
+ result = nil
97
+ break
98
+ end
99
+ end
100
+ result
101
+ end
102
+
103
+ # Quando para encontrar o valor de uma determinada chave
104
+ # é necessaŕio percorer o hash de retorno dês do inicio do mesmo.
105
+ # Como a mensagem tem uma chave 'root' padrão e pode ser diferente
106
+ # para cada orgaao emissor, é setado uma valor na variavel keys_root_path
107
+ # para que não seja necessário ficar setando a mesma chave em todos os
108
+ # métodos utilizados para encontrar determinado valor
109
+ #
110
+ # <b>Tipo de retorno: </b> _Array_
111
+ #
112
+ def path_with_root(path)
113
+ return if path.blank?
114
+ keys_root_path + [path].flatten
115
+ end
116
+
117
+ # Método que retorna as mensagens de retorno da requisição
118
+ # Quando procurar a mensagem a mesma pode retornar em 3 formatos:
119
+ # Hash: Onde encontrou apenas 1 mensagem com Codigo, Mensagem e Solução
120
+ # Array: Onde encontrou mais de uma mensagem com Codigo, Mensagem e Solução
121
+ # String: Onde encontrou uma unica mensagem de texto
122
+ #
123
+ # <b>Tipo de retorno: </b> _Array_
124
+ #
125
+ def get_message_for_path(msg_path)
126
+ messages = []
127
+ _messages = find_value_for_keys(savon_body, path_with_root(msg_path) )
128
+ if _messages.is_a?(Hash)
129
+ messages << get_message_for_hash(_messages)
130
+ elsif _messages.is_a?(Array)
131
+ _messages.map{|msg| messages << get_message_for_hash(msg) if msg.present? }
132
+ elsif _messages.present?
133
+ messages << _messages
134
+ end
135
+ messages.uniq
136
+ end
137
+
138
+ # Método utilizado para quando encontrar uam mensagem que seja um HAsh,
139
+ # onde nesse caso a mensagem terá um codigo de erro, uma mensagem, e uma
140
+ # mensagem de solução
141
+ #
142
+ # <b>Tipo de retorno: </b> _hash_
143
+ #
144
+ def get_message_for_hash(msg_hash)
145
+ {
146
+ code: find_value_for_keys(msg_hash, message_code_key),
147
+ message: find_value_for_keys(msg_hash, message_msg_key),
148
+ solution: find_value_for_keys(msg_hash, message_solution_key)
149
+ }
150
+ end
151
+
152
+
153
+ # Método utilizado para pegar o número do lote RPS
154
+ #
155
+ # <b>Tipo de retorno: </b> _String_
156
+ #
157
+ def get_lot_number
158
+ find_value_for_keys(savon_body, path_with_root(lot_number_path))
159
+ end
160
+
161
+
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,62 @@
1
+ #encoding UTF-8
2
+ module BrNfe
3
+ module Service
4
+ module Response
5
+ module Build
6
+ class Cancelamento < Base
7
+ ##############################################################################################################
8
+ ####################### CAMINHOS PARA ENCONTRAR OS VALORES NA RESPOSTA DA REQUISIÇÃO #####################
9
+ attr_accessor :codigo_cancelamento_path
10
+ def codigo_cancelamento_path
11
+ @codigo_cancelamento_path ||= []
12
+ end
13
+ attr_accessor :data_hora_cancelamento_path
14
+ def data_hora_cancelamento_path
15
+ @data_hora_cancelamento_path ||= []
16
+ end
17
+ attr_accessor :numero_nfs_path
18
+ def numero_nfs_path
19
+ @numero_nfs_path ||= []
20
+ end
21
+ ####################### FIM DA DEFINIÇÃO DOS CAMINHOS ############################
22
+ ######################################################################################
23
+
24
+ def response
25
+ @response ||= BrNfe::Service::Response::Cancelamento.new({
26
+ original_xml: savon_response.xml.force_encoding('UTF-8'),
27
+ error_messages: get_message_for_path(message_errors_path),
28
+ codigo_cancelamento: get_codigo_cancelamento,
29
+ data_hora_cancelamento: get_data_hora_cancelamento,
30
+ numero_nfs: get_numero_nfs,
31
+ })
32
+ end
33
+
34
+ # Método utilizado para pegar o valor da data e hora de cancelmaento
35
+ #
36
+ # <b>Tipo de retorno: </b> _DateTime_ OU _Nil_ OU _String_
37
+ #
38
+ def get_codigo_cancelamento
39
+ find_value_for_keys(savon_body, path_with_root(codigo_cancelamento_path)) if codigo_cancelamento_path.present?
40
+ end
41
+
42
+ # Método utilizado para pegar o código do cancelamento
43
+ #
44
+ # <b>Tipo de retorno: </b> _String_ OU _Integer_
45
+ #
46
+ def get_data_hora_cancelamento
47
+ find_value_for_keys(savon_body, path_with_root(data_hora_cancelamento_path)) if data_hora_cancelamento_path.present?
48
+ end
49
+
50
+ # Método utilizado para pegar o valor da data e hora de cancelmaento
51
+ # Só é utilizado para cancelar a NF-e
52
+ #
53
+ # <b>Tipo de retorno: </b> _DateTime_ OU _Nil_ OU _String_
54
+ #
55
+ def get_numero_nfs
56
+ find_value_for_keys(savon_body, path_with_root(numero_nfs_path)) if numero_nfs_path.present?
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,25 @@
1
+ #encoding UTF-8
2
+ module BrNfe
3
+ module Service
4
+ module Response
5
+ module Build
6
+ class ConsultaLoteRps < BrNfe::Service::Response::Build::InvoiceBuild
7
+ def default_values
8
+ super.merge({
9
+ message_errors_path: [:consultar_lote_rps_resposta, :lista_mensagem_retorno, :mensagem_retorno],
10
+ invoices_path: [:consultar_lote_rps_resposta, :lista_nfse, :comp_nfse],
11
+ })
12
+ end
13
+
14
+ def response
15
+ @response ||= BrNfe::Service::Response::ConsultaLoteRps.new({
16
+ original_xml: savon_response.xml.force_encoding('UTF-8'),
17
+ error_messages: get_message_for_path(message_errors_path),
18
+ notas_fiscais: get_invoices,
19
+ })
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ #encoding UTF-8
2
+ module BrNfe
3
+ module Service
4
+ module Response
5
+ module Build
6
+ class ConsultaNfsPorRps < BrNfe::Service::Response::Build::InvoiceBuild
7
+ def default_values
8
+ super.merge({
9
+ message_errors_path: [:consultar_nfse_rps_resposta, :lista_mensagem_retorno, :mensagem_retorno],
10
+ invoices_path: [:consultar_nfse_rps_resposta, :compl_nfse],
11
+ })
12
+ end
13
+
14
+ def response
15
+ @response ||= BrNfe::Service::Response::ConsultaNfsPorRps.new({
16
+ original_xml: savon_response.xml.force_encoding('UTF-8'),
17
+ error_messages: get_message_for_path(message_errors_path),
18
+ notas_fiscais: get_invoices,
19
+ })
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ #encoding UTF-8
2
+ module BrNfe
3
+ module Service
4
+ module Response
5
+ module Build
6
+ class ConsultaNfse < BrNfe::Service::Response::Build::InvoiceBuild
7
+ def default_values
8
+ super.merge({
9
+ message_errors_path: [:consultar_nfse_resposta, :lista_mensagem_retorno, :mensagem_retorno],
10
+ invoices_path: [:consultar_nfse_resposta, :lista_nfse, :compl_nfse]
11
+ })
12
+ end
13
+ def response
14
+ @response ||= BrNfe::Service::Response::ConsultaNfse.new({
15
+ original_xml: savon_response.xml.force_encoding('UTF-8'),
16
+ error_messages: get_message_for_path(message_errors_path),
17
+ notas_fiscais: get_invoices,
18
+ })
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end