Class: Nfcom::Models::Endereco

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

Overview

Note:

O código do município (IBGE) pode ser consultado em: www.ibge.gov.br/explica/codigos-dos-municipios.php

Representa o endereço do emitente ou destinatário da NF-COM

Esta classe é utilizada tanto pelo emitente quanto pelo destinatário para armazenar as informações completas de endereço.

Atributos obrigatórios:

  • logradouro (rua, avenida, etc) - 2-60 caracteres (ER47)

  • numero (número do imóvel) - 1-60 caracteres (ER47)

  • bairro (bairro/distrito) - 2-60 caracteres (ER47)

  • municipio (nome do município) - 2-60 caracteres (ER47)

  • codigo_municipio (código IBGE do município - 7 dígitos) (ER2)

  • uf (sigla do estado - 2 letras) (D5)

  • cep (8 dígitos) (ER67)

Atributos opcionais:

  • complemento (apartamento, sala, bloco, etc) - 1-60 caracteres (ER47)

  • codigo_pais (padrão: 1058 para Brasil)

  • pais (padrão: ‘Brasil’)

  • telefone (7-12 dígitos) (ER61)

  • email (ER72)

Examples:

Criar endereço completo

endereco = Nfcom::Models::Endereco.new(
  logradouro: 'Rua das Flores',
  numero: '123',
  complemento: 'Sala 101',
  bairro: 'Centro',
  municipio: 'Recife',
  codigo_municipio: '2611606',
  uf: 'PE',
  cep: '50000-000',
  telefone: '(81) 3333-4444'
)

Validar endereço

if endereco.valido?
  puts "Endereço válido"
else
  puts "Erros: #{endereco.erros.join(', ')}"
end

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 = {}) ⇒ Endereco

Returns a new instance of Endereco.



55
56
57
58
59
# File 'lib/nfcom/models/endereco.rb', line 55

def initialize(attributes = {})
  attributes.each do |key, value|
    send("#{key}=", value) if respond_to?("#{key}=")
  end
end

Instance Attribute Details

#bairroObject

Returns the value of attribute bairro.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def bairro
  @bairro
end

#cepObject

Returns the value of attribute cep.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def cep
  @cep
end

#codigo_municipioObject

Returns the value of attribute codigo_municipio.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def codigo_municipio
  @codigo_municipio
end

#codigo_paisObject

Returns the value of attribute codigo_pais.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def codigo_pais
  @codigo_pais
end

#complementoObject

Returns the value of attribute complemento.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def complemento
  @complemento
end

#emailObject

Returns the value of attribute email.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def email
  @email
end

#logradouroObject

Returns the value of attribute logradouro.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def logradouro
  @logradouro
end

#municipioObject

Returns the value of attribute municipio.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def municipio
  @municipio
end

#numeroObject

Returns the value of attribute numero.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def numero
  @numero
end

#paisObject

Returns the value of attribute pais.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def pais
  @pais
end

#telefoneObject

Returns the value of attribute telefone.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def telefone
  @telefone
end

#ufObject

Returns the value of attribute uf.



51
52
53
# File 'lib/nfcom/models/endereco.rb', line 51

def uf
  @uf
end

Instance Method Details

#errosObject

rubocop:disable Metrics/MethodLength



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/nfcom/models/endereco.rb', line 65

def erros # rubocop:disable Metrics/MethodLength
  errors = []

  # Validações de campos obrigatórios
  errors << 'Logradouro é obrigatório' if logradouro.to_s.strip.empty?
  errors << 'Número é obrigatório' if numero.to_s.strip.empty?
  errors << 'Bairro é obrigatório' if bairro.to_s.strip.empty?
  errors << 'Município é obrigatório' if municipio.to_s.strip.empty?
  errors << 'Código do município é obrigatório' if codigo_municipio.to_s.strip.empty?
  errors << 'UF é obrigatório' if uf.to_s.strip.empty?
  errors << 'CEP é obrigatório' if cep.to_s.strip.empty?

  # Validações declarativas de formato/schema
  campos = {}

  # Campos obrigatórios - validar formato apenas se não estiverem vazios
  unless logradouro.to_s.strip.empty?
    campos[:logradouro] = { valor: logradouro, validador: :er47, nome: 'Logradouro', max: 60 }
  end

  campos[:numero] = { valor: numero, validador: :er47, nome: 'Número', max: 60 } unless numero.to_s.strip.empty?

  campos[:bairro] = { valor: bairro, validador: :er47, nome: 'Bairro', max: 60 } unless bairro.to_s.strip.empty?

  unless municipio.to_s.strip.empty?
    campos[:municipio] = { valor: municipio, validador: :er47, nome: 'Município', max: 60 }
  end

  unless codigo_municipio.to_s.strip.empty?
    campos[:codigo_municipio] = { valor: codigo_municipio, validador: :er2, nome: 'Código do município' }
  end

  campos[:uf] = { valor: uf, validador: :d5, nome: 'UF' } unless uf.to_s.strip.empty?

  unless cep.to_s.strip.empty?
    cep_limpo = apenas_numeros(cep)
    campos[:cep] = { valor: cep_limpo, validador: :er67, nome: 'CEP' }
  end

  # Campos opcionais - validar formato apenas se informados
  if complemento && !complemento.to_s.strip.empty?
    campos[:complemento] = { valor: complemento, validador: :er47, nome: 'Complemento', max: 60 }
  end

  if telefone && !telefone.to_s.strip.empty?
    telefone_limpo = apenas_numeros(telefone)
    campos[:telefone] = { valor: telefone_limpo, validador: :er61, nome: 'Telefone' }
  end

  campos[:email] = { valor: email, validador: :er72, nome: 'Email' } if email && !email.to_s.strip.empty?

  # Executar validações declarativas
  errors.concat(Validators::SchemaValidator.validar_campos(campos))

  errors
end

#valido?Boolean

Returns:

  • (Boolean)


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

def valido?
  erros.empty?
end