Class: Nfcom::Models::Destinatario

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

Overview

Representa o destinatário (cliente) da NF-COM

O destinatário é o tomador do serviço de comunicação/telecomunicação, podendo ser pessoa física (CPF) ou pessoa jurídica (CNPJ).

Tipos de assinante disponíveis:

  • :comercial (1) - Estabelecimentos comerciais

  • :industrial (2) - Indústrias

  • :residencial (3) - Residências (padrão para provedores)

  • :produtor_rural (4) - Produtores rurais

  • :orgao_publico (5) - Órgãos públicos

  • :prestador_servico (6) - Prestadores de serviço

  • :concessionaria (7) - Concessionárias

  • :outros (99) - Outros

Atributos obrigatórios:

  • CNPJ ou CPF (pelo menos um)

  • razao_social (nome ou razão social)

  • endereco completo

Atributos opcionais:

  • inscricao_estadual (apenas para PJ)

  • email (recomendado para envio da nota)

Validações automáticas:

  • Validação de dígitos verificadores de CPF/CNPJ

  • Rejeita CPF/CNPJ com todos dígitos iguais

  • Valida campos obrigatórios do endereço

Examples:

Criar destinatário pessoa física

destinatario = Nfcom::Models::Destinatario.new(
  cpf: '12345678901',
  razao_social: 'João da Silva',
  tipo_assinante: :residencial,
  email: 'joao@email.com',
  endereco: {
    logradouro: 'Rua das Flores',
    numero: '123',
    bairro: 'Centro',
    municipio: 'Recife',
    uf: 'PE',
    cep: '50000-000',
    codigo_municipio: '2611606'
  }
)

Criar destinatário pessoa jurídica

destinatario = Nfcom::Models::Destinatario.new(
  cnpj: '12345678000100',
  razao_social: 'Empresa LTDA',
  tipo_assinante: :comercial,
  inscricao_estadual: '0123456789',
  email: 'contato@empresa.com',
  endereco: { ... }
)

Validar destinatário

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

Constant Summary collapse

TIPO_ASSINANTE =

Tipos de assinante

{
  comercial: 1,
  industrial: 2,
  residencial: 3,
  produtor_rural: 4,
  orgao_publico: 5,
  prestador_servico: 6,
  concessionaria: 7,
  outros: 99
}.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 = {}) ⇒ Destinatario

Returns a new instance of Destinatario.



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/nfcom/models/destinatario.rb', line 85

def initialize(attributes = {})
  @endereco = Endereco.new
  @tipo_assinante = :residencial # padrão para provedor de internet

  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

#cnpjObject

Returns the value of attribute cnpj.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def cnpj
  @cnpj
end

#cpfObject

Returns the value of attribute cpf.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def cpf
  @cpf
end

#emailObject

Returns the value of attribute email.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def email
  @email
end

#enderecoObject

Returns the value of attribute endereco.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def endereco
  @endereco
end

#inscricao_estadualObject

Returns the value of attribute inscricao_estadual.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def inscricao_estadual
  @inscricao_estadual
end

#razao_socialObject

Returns the value of attribute razao_social.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def razao_social
  @razao_social
end

#tipo_assinanteObject

Returns the value of attribute tipo_assinante.



70
71
72
# File 'lib/nfcom/models/destinatario.rb', line 70

def tipo_assinante
  @tipo_assinante
end

Instance Method Details

#errosObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/nfcom/models/destinatario.rb', line 102

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

  campos = {}

  campos[:razao_social] = {
    valor: razao_social,
    validador: :er47,
    nome: 'Razão social',
    max: 60
  }

  campos[:email] = { valor: email, validador: :er72, nome: 'Email' } if email && !email.to_s.strip.empty?
  errors.concat(Validators::SchemaValidator.validar_campos(campos))

  errors
end

#pessoa_fisica?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/nfcom/models/destinatario.rb', line 129

def pessoa_fisica?
  !cpf.to_s.strip.empty?
end

#pessoa_juridica?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/nfcom/models/destinatario.rb', line 133

def pessoa_juridica?
  !cnpj.to_s.strip.empty?
end

#tipo_assinante_codigoObject



125
126
127
# File 'lib/nfcom/models/destinatario.rb', line 125

def tipo_assinante_codigo
  TIPO_ASSINANTE[tipo_assinante] || TIPO_ASSINANTE[:residencial]
end

#valido?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/nfcom/models/destinatario.rb', line 98

def valido?
  erros.empty?
end