nfcom 0.1.2

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 (51) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +115 -0
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +66 -0
  5. data/LICENSE +21 -0
  6. data/README.md +280 -0
  7. data/Rakefile +22 -0
  8. data/examples/.env.example +41 -0
  9. data/examples/emitir_nota.rb +91 -0
  10. data/examples/rails_initializer.rb +72 -0
  11. data/lib/nfcom/builder/danfe_com.rb +564 -0
  12. data/lib/nfcom/builder/qrcode.rb +68 -0
  13. data/lib/nfcom/builder/signature.rb +156 -0
  14. data/lib/nfcom/builder/xml_builder.rb +362 -0
  15. data/lib/nfcom/client.rb +106 -0
  16. data/lib/nfcom/configuration.rb +134 -0
  17. data/lib/nfcom/errors.rb +27 -0
  18. data/lib/nfcom/helpers/consulta.rb +28 -0
  19. data/lib/nfcom/models/assinante.rb +146 -0
  20. data/lib/nfcom/models/destinatario.rb +138 -0
  21. data/lib/nfcom/models/emitente.rb +105 -0
  22. data/lib/nfcom/models/endereco.rb +123 -0
  23. data/lib/nfcom/models/fatura/codigo_de_barras/formato_44.rb +52 -0
  24. data/lib/nfcom/models/fatura/codigo_de_barras.rb +57 -0
  25. data/lib/nfcom/models/fatura.rb +172 -0
  26. data/lib/nfcom/models/item.rb +353 -0
  27. data/lib/nfcom/models/nota.rb +398 -0
  28. data/lib/nfcom/models/total.rb +60 -0
  29. data/lib/nfcom/parsers/autorizacao.rb +28 -0
  30. data/lib/nfcom/parsers/base.rb +30 -0
  31. data/lib/nfcom/parsers/consulta.rb +34 -0
  32. data/lib/nfcom/parsers/inutilizacao.rb +23 -0
  33. data/lib/nfcom/parsers/status.rb +23 -0
  34. data/lib/nfcom/utils/certificate.rb +109 -0
  35. data/lib/nfcom/utils/compressor.rb +47 -0
  36. data/lib/nfcom/utils/helpers.rb +141 -0
  37. data/lib/nfcom/utils/response_decompressor.rb +47 -0
  38. data/lib/nfcom/utils/xml_authorized.rb +29 -0
  39. data/lib/nfcom/utils/xml_cleaner.rb +68 -0
  40. data/lib/nfcom/validators/business_rules.rb +45 -0
  41. data/lib/nfcom/validators/schema_validator.rb +316 -0
  42. data/lib/nfcom/validators/xml_validator.rb +29 -0
  43. data/lib/nfcom/version.rb +5 -0
  44. data/lib/nfcom/webservices/autorizacao.rb +36 -0
  45. data/lib/nfcom/webservices/base.rb +96 -0
  46. data/lib/nfcom/webservices/consulta.rb +59 -0
  47. data/lib/nfcom/webservices/inutilizacao.rb +71 -0
  48. data/lib/nfcom/webservices/status.rb +64 -0
  49. data/lib/nfcom.rb +98 -0
  50. data/nfcom.gemspec +42 -0
  51. metadata +242 -0
data/lib/nfcom.rb ADDED
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'nfcom/version'
4
+ require_relative 'nfcom/configuration'
5
+ require_relative 'nfcom/client'
6
+ require_relative 'nfcom/errors'
7
+
8
+ # Utils
9
+ require_relative 'nfcom/utils/xml_cleaner'
10
+ require_relative 'nfcom/utils/certificate'
11
+ require_relative 'nfcom/utils/compressor'
12
+ require_relative 'nfcom/utils/helpers'
13
+ require_relative 'nfcom/utils/response_decompressor'
14
+ require_relative 'nfcom/utils/xml_authorized'
15
+
16
+ # Models
17
+ require_relative 'nfcom/models/nota'
18
+ require_relative 'nfcom/models/emitente'
19
+ require_relative 'nfcom/models/destinatario'
20
+ require_relative 'nfcom/models/assinante'
21
+ require_relative 'nfcom/models/item'
22
+ require_relative 'nfcom/models/fatura'
23
+ require_relative 'nfcom/models/fatura/codigo_de_barras'
24
+ require_relative 'nfcom/models/fatura/codigo_de_barras/formato_44'
25
+ require_relative 'nfcom/models/total'
26
+ require_relative 'nfcom/models/endereco'
27
+
28
+ # Builders
29
+ require_relative 'nfcom/builder/xml_builder'
30
+ require_relative 'nfcom/builder/signature'
31
+ require_relative 'nfcom/builder/qrcode'
32
+ require_relative 'nfcom/builder/danfe_com'
33
+
34
+ # Webservices
35
+ require_relative 'nfcom/webservices/base'
36
+ require_relative 'nfcom/webservices/autorizacao'
37
+ require_relative 'nfcom/webservices/consulta'
38
+ require_relative 'nfcom/webservices/status'
39
+ require_relative 'nfcom/webservices/inutilizacao'
40
+
41
+ # Validators
42
+ require_relative 'nfcom/validators/xml_validator'
43
+ require_relative 'nfcom/validators/business_rules'
44
+ require_relative 'nfcom/validators/schema_validator'
45
+
46
+ # Parsers
47
+ require_relative 'nfcom/parsers/base'
48
+ require_relative 'nfcom/parsers/autorizacao'
49
+ require_relative 'nfcom/parsers/consulta'
50
+ require_relative 'nfcom/parsers/status'
51
+ require_relative 'nfcom/parsers/inutilizacao'
52
+
53
+ # Gem Nfcom - Emissão de NF-COM (Nota Fiscal de Comunicação) modelo 62
54
+ #
55
+ # Esta gem fornece uma interface completa para emissão de notas fiscais
56
+ # de serviços de comunicação e telecomunicação, com integração direta
57
+ # com a SEFAZ através de webservices SOAP.
58
+ #
59
+ # @example Configuração básica
60
+ # Nfcom.configure do |config|
61
+ # config.ambiente = :homologacao
62
+ # config.estado = 'PE'
63
+ # config.certificado_path = '/path/to/certificado.pfx'
64
+ # config.certificado_senha = 'senha'
65
+ # config.cnpj = '12345678000100'
66
+ # config.razao_social = 'Provedor LTDA'
67
+ # config.inscricao_estadual = '0123456789'
68
+ # end
69
+ #
70
+ # @example Emitir uma nota
71
+ # nota = Nfcom::Models::Nota.new do |n|
72
+ # n.serie = 1
73
+ # n.numero = 1
74
+ # n.emitente = Nfcom::Models::Emitente.new(...)
75
+ # n.destinatario = Nfcom::Models::Destinatario.new(...)
76
+ # n.add_item(codigo_servico: '0303', descricao: 'Internet', valor_unitario: 99.90)
77
+ # end
78
+ #
79
+ # client = Nfcom::Client.new
80
+ # resultado = client.autorizar(nota)
81
+ #
82
+ # @see https://github.com/keithyoder/nfcom-ruby Documentação completa no GitHub
83
+ module Nfcom
84
+ class Error < StandardError; end
85
+
86
+ class << self
87
+ attr_accessor :configuration
88
+ end
89
+
90
+ def self.configure
91
+ self.configuration ||= Configuration.new
92
+ yield(configuration) if block_given?
93
+ end
94
+
95
+ def self.reset_configuration!
96
+ self.configuration = Configuration.new
97
+ end
98
+ end
data/nfcom.gemspec ADDED
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/nfcom/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'nfcom'
7
+ spec.version = Nfcom::VERSION
8
+ spec.authors = ['Keith Yoder']
9
+ spec.email = ['keith.yoder@gmail.com']
10
+
11
+ spec.summary = 'Biblioteca Ruby para emissão de NF-COM (Nota Fiscal de Comunicação) modelo 62'
12
+ spec.description = 'Gem para integração com SEFAZ para emissão de NF-COM, incluindo geração ' \
13
+ 'de XML, assinatura digital, envio e consulta de notas fiscais ' \
14
+ 'de serviços de comunicação e telecomunicação'
15
+ spec.homepage = 'https://github.com/keithyoder/nfcom'
16
+ spec.license = 'MIT'
17
+ spec.required_ruby_version = '>= 2.7', '< 4.0'
18
+
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.metadata['source_code_uri'] = 'https://github.com/keithyoder/nfcom-ruby'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/keithyoder/nfcom-ruby/blob/main/CHANGELOG.md'
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
23
+
24
+ # Specify which files should be added to the gem when it is released.
25
+ spec.files = Dir.chdir(__dir__) do
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (File.expand_path(f) == __FILE__) ||
28
+ f.start_with?(*%w[bin/ test/ spec/ features/ .git .circleci appveyor Gemfile])
29
+ end
30
+ end
31
+ spec.bindir = 'exe'
32
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
33
+ spec.require_paths = ['lib']
34
+
35
+ spec.add_dependency 'nokogiri', '>= 1.15.7', '< 2.0'
36
+ spec.add_dependency 'openssl', '>= 2.0', '< 5.0'
37
+ spec.add_dependency 'prawn', '>= 2.4', '< 3.0'
38
+ spec.add_dependency 'prawn-qrcode', '>= 0.3', '< 1.0'
39
+ spec.add_dependency 'prawn-svg', '>= 0.32', '< 1.0'
40
+ spec.add_dependency 'prawn-table', '>= 0.2', '< 1.0'
41
+ spec.add_dependency 'rqrcode', '>= 2.0', '< 4.0'
42
+ end
metadata ADDED
@@ -0,0 +1,242 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nfcom
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Keith Yoder
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2026-04-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.15.7
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.15.7
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: openssl
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '2.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: prawn
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '2.4'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '2.4'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '3.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: prawn-qrcode
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0.3'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0.3'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '1.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: prawn-svg
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0.32'
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0.32'
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: '1.0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: prawn-table
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0.2'
120
+ - - "<"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.0'
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0.2'
130
+ - - "<"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.0'
133
+ - !ruby/object:Gem::Dependency
134
+ name: rqrcode
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '2.0'
140
+ - - "<"
141
+ - !ruby/object:Gem::Version
142
+ version: '4.0'
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '2.0'
150
+ - - "<"
151
+ - !ruby/object:Gem::Version
152
+ version: '4.0'
153
+ description: Gem para integração com SEFAZ para emissão de NF-COM, incluindo geração
154
+ de XML, assinatura digital, envio e consulta de notas fiscais de serviços de comunicação
155
+ e telecomunicação
156
+ email:
157
+ - keith.yoder@gmail.com
158
+ executables: []
159
+ extensions: []
160
+ extra_rdoc_files: []
161
+ files:
162
+ - ".rubocop.yml"
163
+ - ".ruby-version"
164
+ - CHANGELOG.md
165
+ - LICENSE
166
+ - README.md
167
+ - Rakefile
168
+ - examples/.env.example
169
+ - examples/emitir_nota.rb
170
+ - examples/rails_initializer.rb
171
+ - lib/nfcom.rb
172
+ - lib/nfcom/builder/danfe_com.rb
173
+ - lib/nfcom/builder/qrcode.rb
174
+ - lib/nfcom/builder/signature.rb
175
+ - lib/nfcom/builder/xml_builder.rb
176
+ - lib/nfcom/client.rb
177
+ - lib/nfcom/configuration.rb
178
+ - lib/nfcom/errors.rb
179
+ - lib/nfcom/helpers/consulta.rb
180
+ - lib/nfcom/models/assinante.rb
181
+ - lib/nfcom/models/destinatario.rb
182
+ - lib/nfcom/models/emitente.rb
183
+ - lib/nfcom/models/endereco.rb
184
+ - lib/nfcom/models/fatura.rb
185
+ - lib/nfcom/models/fatura/codigo_de_barras.rb
186
+ - lib/nfcom/models/fatura/codigo_de_barras/formato_44.rb
187
+ - lib/nfcom/models/item.rb
188
+ - lib/nfcom/models/nota.rb
189
+ - lib/nfcom/models/total.rb
190
+ - lib/nfcom/parsers/autorizacao.rb
191
+ - lib/nfcom/parsers/base.rb
192
+ - lib/nfcom/parsers/consulta.rb
193
+ - lib/nfcom/parsers/inutilizacao.rb
194
+ - lib/nfcom/parsers/status.rb
195
+ - lib/nfcom/utils/certificate.rb
196
+ - lib/nfcom/utils/compressor.rb
197
+ - lib/nfcom/utils/helpers.rb
198
+ - lib/nfcom/utils/response_decompressor.rb
199
+ - lib/nfcom/utils/xml_authorized.rb
200
+ - lib/nfcom/utils/xml_cleaner.rb
201
+ - lib/nfcom/validators/business_rules.rb
202
+ - lib/nfcom/validators/schema_validator.rb
203
+ - lib/nfcom/validators/xml_validator.rb
204
+ - lib/nfcom/version.rb
205
+ - lib/nfcom/webservices/autorizacao.rb
206
+ - lib/nfcom/webservices/base.rb
207
+ - lib/nfcom/webservices/consulta.rb
208
+ - lib/nfcom/webservices/inutilizacao.rb
209
+ - lib/nfcom/webservices/status.rb
210
+ - nfcom.gemspec
211
+ homepage: https://github.com/keithyoder/nfcom
212
+ licenses:
213
+ - MIT
214
+ metadata:
215
+ homepage_uri: https://github.com/keithyoder/nfcom
216
+ source_code_uri: https://github.com/keithyoder/nfcom-ruby
217
+ changelog_uri: https://github.com/keithyoder/nfcom-ruby/blob/main/CHANGELOG.md
218
+ rubygems_mfa_required: 'true'
219
+ post_install_message:
220
+ rdoc_options: []
221
+ require_paths:
222
+ - lib
223
+ required_ruby_version: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: '2.7'
228
+ - - "<"
229
+ - !ruby/object:Gem::Version
230
+ version: '4.0'
231
+ required_rubygems_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ requirements: []
237
+ rubygems_version: 3.5.11
238
+ signing_key:
239
+ specification_version: 4
240
+ summary: Biblioteca Ruby para emissão de NF-COM (Nota Fiscal de Comunicação) modelo
241
+ 62
242
+ test_files: []