Class: Nfcom::Models::Emitente

Inherits:
Object
  • Object
show all
Includes:
Utils::Helpers
Defined in:
lib/nfcom/models/emitente.rb

Overview

Note:

O emitente deve estar cadastrado e credenciado na SEFAZ para emissão de NF-COM antes de usar esta gem.

Representa o emitente da NF-COM

O emitente é a empresa prestadora do serviço de comunicação que está emitindo a nota fiscal. Deve ser sempre pessoa jurídica (CNPJ).

Atributos obrigatórios:

  • cnpj (14 dígitos, com validação)

  • razao_social (razão social da empresa)

  • inscricao_estadual (IE do estado)

  • endereco completo

Atributos opcionais:

  • nome_fantasia (nome de fantasia/comercial)

  • inscricao_municipal (IM do município)

  • cnae (classificação da atividade econômica)

  • regime_tributario (1=Simples Nacional, 2=Simples Excesso, 3=Normal)

Validações automáticas:

  • Validação de dígitos verificadores do CNPJ

  • Rejeita CNPJ com todos dígitos iguais

  • Valida presença de campos obrigatórios

  • Valida campos obrigatórios do endereço

Examples:

Criar emitente completo

emitente = Nfcom::Models::Emitente.new(
  cnpj: '12345678000100',
  razao_social: 'Provedor Internet LTDA',
  nome_fantasia: 'Meu Provedor',
  inscricao_estadual: '0123456789',
  inscricao_municipal: '987654',
  cnae: '6190-6/01',
  regime_tributario: :simples_nacional,
  endereco: {
    logradouro: 'Av. Principal',
    numero: '1000',
    complemento: 'Sala 101',
    bairro: 'Centro',
    municipio: 'Recife',
    uf: 'PE',
    cep: '50000-000',
    codigo_municipio: '2611606'
  }
)

Validar emitente

if emitente.valido?
  puts "Emitente válido"
else
  puts "Erros: #{emitente.erros.join(', ')}"
end

Constant Summary collapse

REGIME_TRIBUTARIO =

Códigos de Regime Tributário (CRT)

{
  simples_nacional: 1,
  simples_excesso: 2,
  normal: 3
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils::Helpers

apenas_numeros, cnpj_valido?, cpf_valido?, formatar_cep, formatar_cnpj, formatar_cpf, formatar_data, formatar_data_hora, formatar_decimal, gerar_id, limitar_texto, remover_acentos, safe_to_date, vazio?

Constructor Details

#initialize(attributes = {}) ⇒ Emitente

Returns a new instance of Emitente.



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/nfcom/models/emitente.rb', line 71

def initialize(attributes = {})
  @endereco = Endereco.new
  @regime_tributario = :normal # Padrão: Regime Normal

  attributes.each do |key, value|
    if key == :endereco && value.is_a?(Hash)
      @endereco = Endereco.new(value)
    elsif respond_to?("#{key}=")
      send("#{key}=", value)
    end
  end
end

Instance Attribute Details

#cnaeObject

Returns the value of attribute cnae.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def cnae
  @cnae
end

#cnpjObject

Returns the value of attribute cnpj.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def cnpj
  @cnpj
end

#enderecoObject

Returns the value of attribute endereco.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def endereco
  @endereco
end

#inscricao_estadualObject

Returns the value of attribute inscricao_estadual.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def inscricao_estadual
  @inscricao_estadual
end

#inscricao_municipalObject

Returns the value of attribute inscricao_municipal.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def inscricao_municipal
  @inscricao_municipal
end

#nome_fantasiaObject

Returns the value of attribute nome_fantasia.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def nome_fantasia
  @nome_fantasia
end

#razao_socialObject

Returns the value of attribute razao_social.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def razao_social
  @razao_social
end

#regime_tributarioObject

Returns the value of attribute regime_tributario.



61
62
63
# File 'lib/nfcom/models/emitente.rb', line 61

def regime_tributario
  @regime_tributario
end

Instance Method Details

#errosObject



94
95
96
97
98
99
100
101
102
# File 'lib/nfcom/models/emitente.rb', line 94

def erros
  errors = []
  errors << 'CNPJ é obrigatório' if cnpj.to_s.strip.empty?
  errors << 'CNPJ inválido' unless cnpj_valido?(cnpj)
  errors << 'Razão social é obrigatória' if razao_social.to_s.strip.empty?
  errors << 'Inscrição estadual é obrigatória' if inscricao_estadual.to_s.strip.empty?
  errors.concat(endereco.erros.map { |e| "Endereço: #{e}" }) unless endereco.valido?
  errors
end

#regime_tributario_codigoInteger

Retorna o código do regime tributário para o XML

Returns:

  • (Integer)

    Código do regime tributário (1, 2 ou 3)



86
87
88
# File 'lib/nfcom/models/emitente.rb', line 86

def regime_tributario_codigo
  REGIME_TRIBUTARIO[regime_tributario] || REGIME_TRIBUTARIO[:normal]
end

#valido?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/nfcom/models/emitente.rb', line 90

def valido?
  erros.empty?
end