sefaz 0.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +115 -0
  3. data/Gemfile.lock +31 -17
  4. data/README.md +449 -17
  5. data/Rakefile +1 -0
  6. data/docs/CFe-SAT/Especificacao_SAT_v_ER_2_30_03.pdf +0 -0
  7. data/docs/CFe-SAT/Manual_Orientacao_SAT_v_MO_2_19_04.pdf +0 -0
  8. data/docs/CFe-SAT/Manual_do_Emulador_SAT-CF-e_Offline_2015_09_10.pdf +0 -0
  9. data/docs/CFe-SAT/_CANCEL_dataset.md +14 -0
  10. data/docs/CFe-SAT/_SALE_dataset.md +171 -0
  11. data/docs/CFe-SAT/emulador_off_line_v2_9_4.zip +0 -0
  12. data/docs/NFe-NFCe/ANEXO I - Leiaute e Regra de Valida/303/247/303/243o - NF-e e NFC-e.pdf +0 -0
  13. data/docs/NFe-NFCe/ANEXO II -Manual Especifica/303/247/303/265esT/303/251cnicas - Danfe-C/303/263digo-Barras.pdf +0 -0
  14. data/docs/NFe-NFCe/Anexo III - Manual de Conting/303/252ncia - NF-e.pdf +0 -0
  15. data/docs/NFe-NFCe/Anexo IV - Manual de Conting/303/252ncia - NFC-e.pdf +0 -0
  16. data/docs/NFe-NFCe/Manual de Orienta/303/247/303/243o ao Contribuinte - MOC - vers/303/243o 7.0 - NF-e e NFC-e.pdf +0 -0
  17. data/docs/NFe-NFCe/_dataset.md +819 -0
  18. data/lib/sefaz/base.rb +11 -0
  19. data/lib/sefaz/configuration.rb +58 -0
  20. data/lib/sefaz/exception.rb +14 -0
  21. data/lib/sefaz/refinement.rb +91 -0
  22. data/lib/sefaz/utils/connection.rb +35 -0
  23. data/lib/sefaz/utils/prawn_helper.rb +47 -0
  24. data/lib/sefaz/utils/signer.rb +122 -0
  25. data/lib/sefaz/version.rb +1 -1
  26. data/lib/sefaz/webservice/base.rb +13 -0
  27. data/lib/sefaz/webservice/nfe/auditor.rb +35 -0
  28. data/lib/sefaz/webservice/nfe/client.rb +426 -0
  29. data/lib/sefaz/webservice/nfe/connection.rb +17 -0
  30. data/lib/sefaz/webservice/nfe/dataset.rb +451 -0
  31. data/lib/sefaz/webservice/nfe/validator.rb +63 -0
  32. data/lib/sefaz/webservice/nfe/wsdl.rb +117 -0
  33. data/lib/sefaz/webservice/sat/client.rb +44 -0
  34. data/lib/sefaz/webservice/sat/dataset/cancel.rb +34 -0
  35. data/lib/sefaz/webservice/sat/dataset/sale.rb +176 -0
  36. data/lib/sefaz/webservice/sat/templates/base.rb +54 -0
  37. data/lib/sefaz/webservice/sat/templates/cupom_fiscal_55mm.rb +307 -0
  38. data/lib/sefaz/webservice/sat/templates/cupom_fiscal_80mm.rb +307 -0
  39. data/lib/sefaz.rb +45 -3
  40. data/sefaz.gemspec +5 -3
  41. metadata +80 -6
@@ -0,0 +1,307 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SEFAZ
4
+ module Webservice
5
+ module SAT
6
+ module Templates
7
+ # Template para CFe-SAT 80mm em PDF
8
+ class CupomFiscal80mm < SEFAZ::Webservice::SAT::Templates::Base
9
+
10
+ def initialize
11
+ super
12
+ @page_width = Configuration.default.cfe_page_width_80mm
13
+ @margin = Configuration.default.cfe_margin_55mm
14
+ end
15
+
16
+ def build(doc, aut, canc, summary, infAdic)
17
+ doc.font "Courier", style: :normal
18
+ doc.font_size 7
19
+
20
+ infCFe = (canc ? canc.dig(:CFeCanc, :infCFe) : aut.dig(:CFe, :infCFe))
21
+ header(doc, aut)
22
+ body(doc, aut, summary, infCFe.dig(:@chCanc))
23
+ footer(doc, infCFe, infAdic)
24
+ end
25
+
26
+ #
27
+ # CABEÇALHO (Aut)
28
+ #
29
+ def header(doc, aut)
30
+ emit = aut.dig(:CFe, :infCFe, :emit)
31
+ enderEmit = aut.dig(:CFe, :infCFe, :emit, :enderEmit)
32
+
33
+ # Dados do emitente
34
+ doc.text emit.dig(:xFant).to_s.strip.upcase, align: :center
35
+ doc.text emit.dig(:xNome).to_s.strip.upcase, align: :center
36
+ doc.text "#{enderEmit.dig(:xLgr)} #{enderEmit.dig(:nro)} #{enderEmit.dig(:xCpl)} #{enderEmit.dig(:xBairro)} #{enderEmit.dig(:xMun)} #{enderEmit.dig(:CEP)}".to_s.strip.upcase, align: :center
37
+ doc.move_down doc.font_size
38
+ doc.text "CNPJ #{emit.dig(:CNPJ).to_s.mask!("##.###.###/####-##")} IE #{emit.dig(:IE).to_s.mask!("###.###.###.###")}".to_s.strip.upcase, align: :center
39
+ doc.text "IM #{emit.dig(:IM).to_s.mask!("####.###.###.###")}".to_s.strip.upcase, align: :center if emit.dig(:IM)
40
+ end
41
+
42
+ #
43
+ # CORPO DO EXTRATO (Aut)
44
+ #
45
+ # Exibe os dados de forma dinâmica:
46
+ # Quando CFe Movimento: exibe lista dos itens a partir do XML AUTORIZADO (Resumido ou Não Resumido).
47
+ # Quando CFe Cancelamento: exibe os dados do XML AUTORIZADO em modo cancelado.
48
+ #
49
+ def body(doc, aut, summary, chCanc)
50
+ tpAmb = aut.dig(:CFe, :infCFe, :ide, :tpAmb)
51
+ nCFe = (tpAmb == 1) ? aut.dig(:CFe, :infCFe, :ide, :nCFe) : "000000"
52
+
53
+ # (I) - Título
54
+ doc.move_down 1.mm
55
+ doc.text "Extrato #{nCFe} do CUPOM FISCAL ELETRÔNICO - SAT", style: :bold, align: :center
56
+
57
+ # (A) - Título - Cancelamento
58
+ if chCanc
59
+ doc.move_down 1.mm
60
+ doc.text "CANCELAMENTO", style: :bold, align: :center
61
+ end
62
+
63
+ # (TESTE) Marca de Teste
64
+ if tpAmb == "2"
65
+ doc.move_down doc.font_size
66
+
67
+ doc.text "= TESTE =", style: :italic, align: :center
68
+ doc.move_down doc.font_size
69
+ 3.times do
70
+ doc.text_box (">" * 100), at: [0, doc.cursor], height: doc.font_size, width: doc.bounds.width
71
+ doc.move_down doc.font_size
72
+ doc.move_down doc.font_size
73
+ end
74
+ end
75
+
76
+ # Exibe o extrato no modo cancelado caso exista Chave de Cancelamento, caso contrário exibe no modo movimento
77
+ if chCanc
78
+ body_canceled_mode(doc, aut)
79
+ else
80
+ body_movement_mode(doc, aut, summary)
81
+ end
82
+ end
83
+
84
+ #
85
+ # CORPO DO EXTRATO > MODO MOVIMENTO (Aut)
86
+ #
87
+ # Exibe lista dos itens.
88
+ #
89
+ def body_movement_mode(doc, aut, summary)
90
+ # (II) - Legenda
91
+ doc.text "#|COD|DESC|QTD|UN|VL UN R$|(VL TR R$)*|VL ITEM R$", size: 6.7
92
+ dash(doc, gap: 2, space: 0.5, line_width: 0.1, x1: 0, x2: doc.bounds.width, y: doc.cursor)
93
+
94
+ # (III) - Registros de item
95
+ unless summary
96
+ det = aut.dig(:CFe, :infCFe, :det)
97
+ det = det.is_a?(Array) ? det : [det]
98
+ det.each do |i|
99
+ # DADOS: #|COD|DESC|QTD|UN|VL UN R$|(VL TR R$)*
100
+ doc.bounding_box([0, doc.cursor], width: (doc.bounds.width - 13.mm)) do
101
+ doc.text "#{i.dig(:@nItem)} #{i.dig(:prod, :cProd)} #{i.dig(:prod, :xProd)} #{i.dig(:prod, :qCom)} #{i.dig(:prod, :uCom)} X #{i.dig(:prod, :vUnCom).to_f.to_currency} (#{i.dig(:imposto, :vItem12741).to_f.to_currency})"
102
+ end
103
+
104
+ # DADOS: VL ITEM R$
105
+ doc.move_down -doc.font_size
106
+ doc.text i.dig(:prod, :vProd).to_f.to_currency, align: :right
107
+
108
+ # DADOS: DESCONTO
109
+ if i.dig(:prod, :vDesc).to_f > 0
110
+ doc.float { doc.text "-#{i.dig(:prod, :vDesc).to_f.to_currency}", align: :right }
111
+ doc.text "desconto sobre item"
112
+ end
113
+
114
+ # DADOS: ACRÉSCIMO
115
+ if i.dig(:prod, :vOutro).to_f > 0
116
+ doc.float { doc.text "+#{i.dig(:prod, :vOutro).to_f.to_currency}", align: :right }
117
+ doc.text "acréscimo sobre item"
118
+ end
119
+
120
+ # DADOS: RATEIO DESCONTO
121
+ if i.dig(:prod, :vRatDesc).to_f > 0
122
+ doc.float { doc.text "-#{i.dig(:prod, :vRatDesc).to_f.to_currency}", align: :right }
123
+ doc.text "rateio de desconto sobre subtotal"
124
+ end
125
+
126
+ # DADOS: RATEIO ACRÉSCIMO
127
+ if i.dig(:prod, :vRatAcr).to_f > 0
128
+ doc.float { doc.text "+#{i.dig(:prod, :vRatAcr).to_f.to_currency}", align: :right }
129
+ doc.text "rateio de acréscimo sobre subtotal"
130
+ end
131
+
132
+ # DADOS: ISSQN
133
+ if i.dig(:imposto, :ISSQN, :vDeducISSQN).to_f > 0
134
+ doc.float { doc.text "-#{i.dig(:imposto, :ISSQN, :vDeducISSQN).to_f.to_currency}", align: :right }
135
+ doc.text "dedução para ISSQN"
136
+ doc.float { doc.text i.dig(:imposto, :ISSQN, :vBC).to_f.to_currency, align: :right }
137
+ doc.text "base de cálculo ISSQN"
138
+ end
139
+ end
140
+ end
141
+
142
+ # (IV) - Total do Cupom
143
+ total = aut.dig(:CFe, :infCFe, :total)
144
+
145
+ # DADOS: VALOR BRUTO
146
+ if (total.dig(:DescAcrEntr, :vDescSubtot).to_f > 0) || (total.dig(:DescAcrEntr, :vAcresSubtot).to_f > 0) || (total.dig(:ICMSTot, :vDesc).to_f > 0) || (total.dig(:ICMSTot, :vOutro).to_f > 0)
147
+ doc.float { doc.text total.dig(:ICMSTot, :vProd).to_f.to_currency, align: :right }
148
+ doc.text "Total bruto de itens"
149
+ end
150
+
151
+ # DADOS: TOTAL DESC/ACRES SOBRE ITENS
152
+ if (total.dig(:ICMSTot, :vDesc).to_f > 0) || (total.dig(:ICMSTot, :vOutro).to_f > 0)
153
+ valor11 = total.dig(:ICMSTot, :vOutro).to_f - total.dig(:ICMSTot, :vDesc).to_f
154
+ doc.text "Total de descontos/acréscimos sobre item"
155
+ doc.text "#{ valor11 > 0 ? '+' : '-' }#{valor11.abs.to_currency}", align: :right
156
+ end
157
+
158
+ # DADOS: DESCONTO SOBRE TOTAL
159
+ if total.dig(:DescAcrEntr, :vDescSubtot).to_f > 0
160
+ doc.float { doc.text "-#{total.dig(:DescAcrEntr, :vDescSubtot).to_f.to_currency}", align: :right }
161
+ doc.text "Desconto sobre subtotal"
162
+ end
163
+
164
+ # DADOS: ACRÉSCIMO SOBRE TOTAL
165
+ if total.dig(:DescAcrEntr, :vAcresSubtot).to_f > 0
166
+ doc.float { doc.text "+#{total.dig(:DescAcrEntr, :vAcresSubtot).to_f.to_currency}", align: :right }
167
+ doc.text "Acréscimo sobre subtotal"
168
+ end
169
+
170
+ # DADOS: TOTAL FINAL
171
+ doc.float { doc.text total.dig(:vCFe).to_f.to_currency, style: :bold, align: :right }
172
+ doc.text "Total R$", style: :bold
173
+
174
+ # (V) - Meio de Pagamento
175
+ pgto = aut.dig(:CFe, :infCFe, :pgto)
176
+ mp = aut.dig(:CFe, :infCFe, :pgto, :MP)
177
+ mp = mp.is_a?(Array) ? mp : [mp]
178
+ mp.each do |i|
179
+ # DADOS: DESCRIÇÃO MEIO DE PAGAMENTO
180
+ doc.bounding_box([0, doc.cursor], width: (doc.bounds.width - 13.mm)) do
181
+ doc.text Configuration.default.cfe_cMP_cod_desc[i.dig(:cMP)]
182
+ end
183
+
184
+ # DADOS: VALOR PAGAMENTO
185
+ doc.move_down -doc.font_size
186
+ doc.text i.dig(:vMP).to_f.to_currency, align: :right
187
+ end
188
+
189
+ # DADOS: TROCO
190
+ doc.float { doc.text pgto.dig(:vTroco).to_f.to_currency, align: :right }
191
+ doc.text "Troco R$"
192
+
193
+ # (VI) - Observações do Fisco
194
+ obsFisco = aut.dig(:CFe, :infCFe, :obsFisco)
195
+ if obsFisco
196
+ obsFisco = obsFisco.is_a?(Array) ? obsFisco : [obsFisco]
197
+ obsFisco.each do |i|
198
+ doc.text "#{i.dig(:xCampo)}: #{i.dig(:xTexto)}"
199
+ end
200
+ end
201
+
202
+ # (VII) - Dados para Entrega
203
+ entrega = aut.dig(:CFe, :infCFe, :entrega)
204
+ doc.text "ENDEREÇO DE ENTREGA: #{entrega.dig(:xLgr)} #{entrega.dig(:nro)} #{entrega.dig(:xCpl)} #{entrega.dig(:xBairro)} #{entrega.dig(:xMun)} #{entrega.dig(:UF)}".to_s.strip.upcase if entrega
205
+
206
+ # (VIII) - Observações do Contribuinte
207
+ infCFe = aut.dig(:CFe, :infCFe)
208
+ doc.text "OBSERVAÇÕES DO CONTRIBUINTE"
209
+ doc.text infCFe.dig(:infCpl)
210
+ doc.text "Valor aproximado dos tributos deste cupom R$"
211
+ doc.text total.dig(:vCFeLei12741).to_f.to_currency, align: :right
212
+ doc.text "(conforme Lei Fed. 12.741/2012)"
213
+ doc.move_down doc.font_size
214
+ end
215
+
216
+ #
217
+ # CORPO DO EXTRATO > MODO CANCELADO (Aut)
218
+ #
219
+ # Exibe os dados do XML AUTORIZADO em modo cancelado.
220
+ # É renderizado o rodapé do XML AUTORIZADO no final do corpo do extrato.
221
+ #
222
+ def body_canceled_mode(doc, aut)
223
+ total = aut.dig(:CFe, :infCFe, :total)
224
+ infCFe = aut.dig(:CFe, :infCFe)
225
+
226
+ # (B) - Dados do Cupom Fiscal Cancelado
227
+ doc.move_down 1.mm
228
+ doc.text "DADOS DO CUPOM ELETRÔNICO CANCELADO", style: :bold
229
+ doc.text "TOTAL R$ #{total.dig(:vCFe).to_f.to_currency}"
230
+
231
+ # (RODAPÉ DE MOVIMENTO) Exibe o rodapé do Extrato de Movimento no corpo do Extrato de Cancelamento
232
+ footer(doc, infCFe, vl_aprox_trib: false)
233
+ end
234
+
235
+ #
236
+ # RODAPÉ (Aut/Canc)
237
+ #
238
+ # Exibe os elementos de rodapé (QR Code, código de barras, número da chave, mensagens fixas, etc).
239
+ # O método permite exibir o rodapé no modo movimento ou cancelado.
240
+ #
241
+ def footer(doc, infCFe, infAdic = nil, vl_aprox_trib: true)
242
+ id = infCFe.dig(:@Id)
243
+ chCanc = infCFe.dig(:@chCanc)
244
+ ide = infCFe.dig(:ide)
245
+ total = infCFe.dig(:total)
246
+
247
+ # Título do cancelamento
248
+ if chCanc
249
+ doc.move_down 2
250
+ dash(doc, gap: 2, space: 0.5, line_width: 0.1, x1: 0, x2: doc.bounds.width, y: doc.cursor)
251
+ doc.text "DADOS DO CUPOM FISCAL ELETRÔNICO DE CANCELAMENTO", align: :center, style: :bold, size: 6.8
252
+ end
253
+
254
+ # Número da chave do Cupom Fiscal (dividos em 11 blocos com 4 números cada)
255
+ doc.move_down 2
256
+ doc.text id.to_s.delete("^0-9").scan(/.{4}/).join(" "), align: :center, style: :bold
257
+ doc.move_down doc.font_size
258
+
259
+ # Código de barra CODE 128-C (divido em duas partes)
260
+ barcode_128c(doc, value: id.to_s.delete("^0-9"), x: 0, y: doc.cursor, xdim: 0.72)
261
+ doc.move_down 1.mm
262
+
263
+ # Informação do consumidor, SAT e mensagens fixas
264
+ doc.float do
265
+ doc.move_down 5.mm
266
+ doc.bounding_box([80, doc.cursor], width: 115) do
267
+ # Informação do consumidor (CNPJ/CPF e NOME)
268
+ if !chCanc && (infCFe.dig(:dest, :CNPJ) || infCFe.dig(:dest, :CPF))
269
+ info = "<b>Consumidor:</b> "
270
+ info = info + infCFe.dig(:dest, :CNPJ).to_s.mask!("##.###.###/####-##") if infCFe.dig(:dest, :CNPJ)
271
+ info = info + infCFe.dig(:dest, :CPF).to_s.mask!("###.###.###-##") if infCFe.dig(:dest, :CPF)
272
+ doc.text info, inline_format: true, size: 6
273
+ doc.text infCFe.dig(:dest, :xNome), size: 6 if infCFe.dig(:dest, :xNome)
274
+ end
275
+
276
+ # Informação do SAT (Nº Série SAT)
277
+ doc.text "<b>No. Serie do SAT:</b> #{ide.dig(:nserieSAT)}", inline_format: true, size: 6
278
+ doc.text DateTime.parse("#{ide.dig(:dEmi)}T#{ide.dig(:hEmi)}").strftime("%d/%m/%Y - %H:%M:%S"), size: 6
279
+ doc.move_down doc.font_size
280
+
281
+ # Mensagens fixas do Cupom Fiscal
282
+ if !chCanc
283
+ doc.text "Consulte o QR Code pelo aplicativo \"#{Configuration.default.cfe_qr_code_aplicativo}\", disponível na AppStore (Apple) e PlayStore (Android)", size: 6
284
+ doc.move_down doc.font_size
285
+ doc.text "*valor aproximado dos tributos do item", size: 5 if vl_aprox_trib
286
+ end
287
+ end
288
+ end
289
+
290
+ # QR Code do Cupom Fiscal = Id|(dEmi)(hEmi)|vCFe|(CNPJ/CPF)|assinaturaQRCODE
291
+ doc.move_down 2.mm
292
+ codigo_qr_code = "#{id}|#{ide.dig(:dEmi)}#{ide.dig(:hEmi)}|#{total.dig(:vCFe)}|#{(infCFe.dig(:dest, :CNPJ) || infCFe.dig(:dest, :CPF))}|#{ide.dig(:assinaturaQRCODE)}"
293
+ qrcode(doc, value: codigo_qr_code, x: 0, y: doc.cursor)
294
+ doc.move_down 3.mm
295
+
296
+ # Informações adicionais do Cupom Fiscal (customizado pelo contribuinte)
297
+ if infAdic
298
+ dash(doc, gap: 2, space: 0.5, line_width: 0.1, x1: 0, x2: doc.bounds.width, y: doc.cursor)
299
+ doc.text infAdic, align: :justify, size: 6
300
+ end
301
+ end
302
+
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
data/lib/sefaz.rb CHANGED
@@ -1,10 +1,52 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json'
4
+ require 'net/http'
3
5
  require 'savon'
6
+ require 'prawn'
7
+ require 'prawn/measurement_extensions'
8
+ require 'barby'
9
+ require 'barby/barcode/code_128'
10
+ require 'barby/barcode/qr_code'
11
+ require 'barby/outputter/prawn_outputter'
4
12
 
5
- require_relative "sefaz/version"
13
+ require 'sefaz/base'
14
+ require 'sefaz/configuration'
15
+ require 'sefaz/exception'
16
+ require 'sefaz/refinement'
17
+ require 'sefaz/version'
18
+
19
+ require 'sefaz/utils/connection'
20
+ require 'sefaz/utils/prawn_helper'
21
+ require 'sefaz/utils/signer'
22
+ require 'sefaz/webservice/base'
23
+
24
+ require 'sefaz/webservice/nfe/client'
25
+ require 'sefaz/webservice/nfe/auditor'
26
+ require 'sefaz/webservice/nfe/connection'
27
+ require 'sefaz/webservice/nfe/dataset'
28
+ require 'sefaz/webservice/nfe/validator'
29
+ require 'sefaz/webservice/nfe/wsdl'
30
+
31
+ require 'sefaz/webservice/sat/client'
32
+ require 'sefaz/webservice/sat/templates/base'
33
+ require 'sefaz/webservice/sat/templates/cupom_fiscal_55mm'
34
+ require 'sefaz/webservice/sat/templates/cupom_fiscal_80mm'
35
+ require 'sefaz/webservice/sat/dataset/cancel'
36
+ require 'sefaz/webservice/sat/dataset/sale'
6
37
 
7
38
  module SEFAZ
8
- class Error < StandardError; end
9
- # Your code goes here...
39
+ # Personalize as configurações padrão da biblioteca usando bloco
40
+ # config/initializers/sefaz_config.rb
41
+ # SEFAZ.configure do |config|
42
+ # config.xxxxxxx = "xxxxxxx"
43
+ # end
44
+ # Se nenhum bloco for fornecido, retorna o objeto de configuração padrão
45
+ def self.configure
46
+ if block_given?
47
+ yield(Configuration.default)
48
+ else
49
+ Configuration.default
50
+ end
51
+ end
10
52
  end
data/sefaz.gemspec CHANGED
@@ -8,11 +8,10 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Henrique Shiraishi"]
9
9
  spec.email = ["henriqueashiraishi@gmail.com"]
10
10
 
11
- spec.summary = "Módulo de serviços da SEFAZ"
12
- spec.description = "Biblioteca de cálculos, serviços e transmissão da SEFAZ"
11
+ spec.summary = "Integração com a Secretaria da Fazenda (SEFAZ)."
13
12
  spec.homepage = "https://github.com/henriqueshiraishi/ruby-sefaz"
14
13
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.6.0"
14
+ spec.required_ruby_version = ">= 2.5.1"
16
15
 
17
16
  spec.metadata["homepage_uri"] = spec.homepage
18
17
  spec.metadata["source_code_uri"] = "https://github.com/henriqueshiraishi/ruby-sefaz"
@@ -31,6 +30,9 @@ Gem::Specification.new do |spec|
31
30
 
32
31
  # Uncomment to register a new dependency of your gem
33
32
  spec.add_dependency "savon", "~> 2.13.0"
33
+ spec.add_dependency "prawn", "~> 2.4.0"
34
+ spec.add_dependency "barby", "~> 0.6.9"
35
+ spec.add_dependency "rqrcode", "~> 0.10.1"
34
36
 
35
37
  # For more information and examples about making a new gem, check out our
36
38
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sefaz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrique Shiraishi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-10 00:00:00.000000000 Z
11
+ date: 2024-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -24,7 +24,49 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.13.0
27
- description: Biblioteca de cálculos, serviços e transmissão da SEFAZ
27
+ - !ruby/object:Gem::Dependency
28
+ name: prawn
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.4.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.4.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: barby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.6.9
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.6.9
55
+ - !ruby/object:Gem::Dependency
56
+ name: rqrcode
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.1
69
+ description:
28
70
  email:
29
71
  - henriqueashiraishi@gmail.com
30
72
  executables: []
@@ -37,8 +79,40 @@ files:
37
79
  - LICENSE.txt
38
80
  - README.md
39
81
  - Rakefile
82
+ - docs/CFe-SAT/Especificacao_SAT_v_ER_2_30_03.pdf
83
+ - docs/CFe-SAT/Manual_Orientacao_SAT_v_MO_2_19_04.pdf
84
+ - docs/CFe-SAT/Manual_do_Emulador_SAT-CF-e_Offline_2015_09_10.pdf
85
+ - docs/CFe-SAT/_CANCEL_dataset.md
86
+ - docs/CFe-SAT/_SALE_dataset.md
87
+ - docs/CFe-SAT/emulador_off_line_v2_9_4.zip
88
+ - docs/NFe-NFCe/ANEXO I - Leiaute e Regra de Validação - NF-e e NFC-e.pdf
89
+ - docs/NFe-NFCe/ANEXO II -Manual EspecificaçõesTécnicas - Danfe-Código-Barras.pdf
90
+ - docs/NFe-NFCe/Anexo III - Manual de Contingência - NF-e.pdf
91
+ - docs/NFe-NFCe/Anexo IV - Manual de Contingência - NFC-e.pdf
92
+ - docs/NFe-NFCe/Manual de Orientação ao Contribuinte - MOC - versão 7.0 - NF-e e NFC-e.pdf
93
+ - docs/NFe-NFCe/_dataset.md
40
94
  - lib/sefaz.rb
95
+ - lib/sefaz/base.rb
96
+ - lib/sefaz/configuration.rb
97
+ - lib/sefaz/exception.rb
98
+ - lib/sefaz/refinement.rb
99
+ - lib/sefaz/utils/connection.rb
100
+ - lib/sefaz/utils/prawn_helper.rb
101
+ - lib/sefaz/utils/signer.rb
41
102
  - lib/sefaz/version.rb
103
+ - lib/sefaz/webservice/base.rb
104
+ - lib/sefaz/webservice/nfe/auditor.rb
105
+ - lib/sefaz/webservice/nfe/client.rb
106
+ - lib/sefaz/webservice/nfe/connection.rb
107
+ - lib/sefaz/webservice/nfe/dataset.rb
108
+ - lib/sefaz/webservice/nfe/validator.rb
109
+ - lib/sefaz/webservice/nfe/wsdl.rb
110
+ - lib/sefaz/webservice/sat/client.rb
111
+ - lib/sefaz/webservice/sat/dataset/cancel.rb
112
+ - lib/sefaz/webservice/sat/dataset/sale.rb
113
+ - lib/sefaz/webservice/sat/templates/base.rb
114
+ - lib/sefaz/webservice/sat/templates/cupom_fiscal_55mm.rb
115
+ - lib/sefaz/webservice/sat/templates/cupom_fiscal_80mm.rb
42
116
  - sefaz.gemspec
43
117
  - sig/sefaz.rbs
44
118
  homepage: https://github.com/henriqueshiraishi/ruby-sefaz
@@ -56,15 +130,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
56
130
  requirements:
57
131
  - - ">="
58
132
  - !ruby/object:Gem::Version
59
- version: 2.6.0
133
+ version: 2.5.1
60
134
  required_rubygems_version: !ruby/object:Gem::Requirement
61
135
  requirements:
62
136
  - - ">="
63
137
  - !ruby/object:Gem::Version
64
138
  version: '0'
65
139
  requirements: []
66
- rubygems_version: 3.3.26
140
+ rubygems_version: 3.1.6
67
141
  signing_key:
68
142
  specification_version: 4
69
- summary: Módulo de serviços da SEFAZ
143
+ summary: Integração com a Secretaria da Fazenda (SEFAZ).
70
144
  test_files: []