class Contabilidade::MovimentacaoDaContaBancaria < ApplicationRecord
	has_paper_trail

	attr_accessor :data_final
	attr_accessor :data_inicial
	attr_accessor :busca_ativa

	belongs_to :conta_bancaria_por_unidade_orcamentaria, class_name: 'Base::ContaBancariaPorUnidadeOrcamentaria'
	belongs_to :modulo, polymorphic: true, required: true
	delegate :conta_bancaria, to: :conta_bancaria_por_unidade_orcamentaria

	has_many :conciliacoes
	has_many :transacoes_da_conciliacao, through: :conciliacoes

	validates_presence_of :modulo_id, :modulo_type

	validates :modulo_id, :modulo_type, immutable: true

	before_save :define_tipo_de_movimentacao, if: Proc.new { self.valor.to_f > 0 }
	after_destroy :remove_conciliacoes

	after_save :atualizar_saldo_inicial_dos_exercicios_posteriores
	after_destroy :atualizar_saldo_inicial_dos_exercicios_posteriores

	# saldo é atualizado no banco de dadados, funcao: contas_bancarias_por_unidade_orcamentaria_atualiza_saldo() ao inserir, atualizar e apagar

	scope :do_exercicio_atual, -> (exercicio_atual) {
		joins(conta_bancaria_por_unidade_orcamentaria: [unidade_orcamentaria: :orgao]).where(
			'loa_orgaos.orcamento_id = ?', exercicio_atual.id
		)
	}
	scope :por_movimentacao_inicial, -> { where(modulo_type: 'Base::ContaBancariaPorUnidadeOrcamentaria') }
	scope :exceto_movimentacao_inicial, -> { where.not(modulo_type: 'Base::ContaBancariaPorUnidadeOrcamentaria') }
	scope :por_transferencia, -> { where(modulo_type: 'Contabilidade::TransferenciaFinanceira') }
	scope :por_talao, -> { where(modulo_type: 'Contabilidade::TalaoDeReceita') }
	scope :por_anulacao_do_talao, -> { where(modulo_type: 'Contabilidade::AnulacaoDoTalaoDeReceita') }
	scope :por_pagamento, -> { where(modulo_type: 'Contabilidade::Pagamento') }
	scope :por_despesa_extraorcamentaria, -> { where(modulo_type: 'Contabilidade::DespesaExtraOrcamentaria') }

	enum tipo_de_movimentacao: {
		credito: 1,
		debito: 2
	}

	def descricao_do_movimento
		return self.historico if modulo.nil?

		if modulo_type.eql?('Contabilidade::TalaoDeReceita')
			if self.modulo.natureza_da_receita.try(:deducao?)
				"Receita #{modulo.localizar(:origem_do_talao)} de Dedução do Talão N°: #{modulo.numero_do_talao}"
			else
				self.historico
			end
		elsif modulo_type.eql?('Contabilidade::Pagamento')
			self.historico
		elsif modulo_type.eql?('Contabilidade::EstornoDePagamento')
			"Estorno do Pagamento N°: #{modulo.pagamento.numero}"
		elsif modulo_type.eql?('Contabilidade::DespesaExtraOrcamentaria')
			self.historico
		elsif modulo_type.eql?('Contabilidade::EstornoDeDespesaExtraOrcamentaria')
			"Estorno do Pagamento Extraorçamentário N°: #{modulo.despesa_extra_orcamentaria.numero_de_caixa}"
		elsif modulo_type.eql?('Contabilidade::TransferenciaFinanceira')
			self.historico
		else
			self.historico
		end
	end

	def descricao_do_movimento_relatorio
		case modulo_type
			when "Base::ContaBancariaPorUnidadeOrcamentaria"
				return self.historico
			when "Contabilidade::Pagamento"
				return self.descricao_movimentacao_de_pagamento
			when "Contabilidade::EstornoDePagamento"
				return self.descricao_movimentacao_estorno_de_pagamento
			when "Contabilidade::TalaoDeReceita"
				return self.descricao_movimentacao_talao_de_receita
			when "Contabilidade::AnulacaoDoTalaoDeReceita"
				return self.descricao_movimentacao_anulacao_de_receita
			when "Contabilidade::DespesaExtraOrcamentaria"
				return self.descricao_movimentacao_despesa_extra
			when "Contabilidade::TransferenciaFinanceira"
				return self.descricao_movimentacao_de_transferencia_financeira
			when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
				return self.descricao_movimentacao_estorno_despesa_extra
			else
				return self.historico
		end
	end

	def retorna_a_pessoa_associada_ao_movimento
		case modulo_type
		when "Base::ContaBancariaPorUnidadeOrcamentaria"
			"#{self.conta_bancaria_por_unidade_orcamentaria.unidade_orcamentaria.nome}"
		when "Contabilidade::Pagamento"
			"#{self.try(:modulo).try(:credor).try(:nome)}"
		when "Contabilidade::EstornoDePagamento"
			"#{self.try(:modulo).try(:pagamento).try(:credor).try(:nome)}"
		when "Contabilidade::TalaoDeReceita"
			"#{self.try(:modulo).try(:pessoa).try(:nome)}"
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			"#{self.try(:modulo).try(:talao_de_receita).try(:pessoa).try(:nome)}"
		when "Contabilidade::DespesaExtraOrcamentaria"
			"#{self.try(:modulo).try(:pessoa).try(:nome)}"
		when "Contabilidade::TransferenciaFinanceira"
			if self.modulo.present?
				if self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_origem.id
					"#{self.try(:modulo).try(:conta_bancaria_origem).try(:unidade_orcamentaria).try(:nome)}"
				elsif self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_destino.id
					"#{self.try(:modulo).try(:conta_bancaria_destino).try(:unidade_orcamentaria).try(:nome)}"
				end
			end
		when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
			"#{self.try(:modulo).try(:despesa_extra_orcamentaria).try(:pessoa).try(:nome)}"
		else
			"#{self.conta_bancaria_por_unidade_orcamentaria.unidade_orcamentaria.nome}"
		end
	end

	def retorna_id_da_pessoa_associada_ao_movimento
		case modulo_type
		when "Base::ContaBancariaPorUnidadeOrcamentaria"
			"#{self.conta_bancaria_por_unidade_orcamentaria.try(:unidade_orcamentaria).try(:id)}"
		when "Contabilidade::Pagamento"
			"#{self.try(:modulo).try(:credor).try(:id)}"
		when "Contabilidade::EstornoDePagamento"
			"#{self.try(:modulo).try(:pagamento).try(:credor).try(:id)}"
		when "Contabilidade::TalaoDeReceita"
			"#{self.try(:modulo).try(:pessoa).try(:id)}"
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			"#{self.try(:modulo).try(:talao_de_receita).try(:pessoa).try(:id)}"
		when "Contabilidade::DespesaExtraOrcamentaria"
			"#{self.try(:modulo).try(:pessoa).try(:id)}"
		when "Contabilidade::TransferenciaFinanceira"
			if self.modulo.present?
				if self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_origem.id
					"#{self.try(:modulo).try(:conta_bancaria_origem).try(:unidade_orcamentaria).try(:pessoa).try(:id)}"
				elsif self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_destino.id
					"#{self.try(:modulo).try(:conta_bancaria_destino).try(:unidade_orcamentaria).try(:pessoa).try(:id)}"
				end
			end
		when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
			"#{self.try(:modulo).try(:despesa_extra_orcamentaria).try(:pessoa).try(:id)}"
		else
			"#{self.conta_bancaria_por_unidade_orcamentaria.unidade_orcamentaria.try(:pessoa).try(:id)}"
		end
	end

	def codigo_da_conta_extra_associada_ao_movimento
		case modulo_type
		when "Base::ContaBancariaPorUnidadeOrcamentaria"
			return '000'
		when "Contabilidade::Pagamento"
			return '000'
		when "Contabilidade::EstornoDePagamento"
			return '000'
		when "Contabilidade::TalaoDeReceita"
			if self.modulo.present? && self.try(:modulo).try(:extra_orcamentario?) && self.try(:modulo).try(:conta_extra_orcamentaria).present?
				self.try(:modulo).try(:conta_extra_orcamentaria).codigo
			else
				'000'
			end
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			if self.modulo.present? && self.try(:modulo).try(:talao_de_receita).try(:extra_orcamentario?) && self.try(:modulo).try(:talao_de_receita).try(:conta_extra_orcamentaria).present?
				self.try(:modulo).try(:talao_de_receita).try(:conta_extra_orcamentaria).try(:codigo)
			else
				'000'
			end
		when "Contabilidade::DespesaExtraOrcamentaria"
			if self.modulo.present? && self.try(:modulo).try(:conta_extra_orcamentaria).present?
				self.modulo.conta_extra_orcamentaria.try(:codigo)
			else
				'000'
			end
		when "Contabilidade::TransferenciaFinanceira"
			if self.modulo.present?
				if self.modulo.try(:pagamento_da_retencao).try(:retencao).try(:conta_extra_orcamentaria).present?
					self.modulo.pagamento_da_retencao.retencao.conta_extra_orcamentaria.try(:codigo)
				else
					'000'
				end
			else
				'000'
			end
		when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
			if self.modulo.present? && self.try(:modulo).try(:despesa_extra_orcamentaria).try(:conta_extra_orcamentaria).present?
				self.modulo.try(:despesa_extra_orcamentaria).try(:conta_extra_orcamentaria).try(:codigo)
			else
				'000'
			end
		else
			'000'
		end
	end

	def numero_da_movimentacao_associada
		case modulo_type
		when "Base::ContaBancariaPorUnidadeOrcamentaria"
			return '000'
		when "Contabilidade::Pagamento"
			if self.modulo.present?
				self.try(:modulo).try(:pagamento).try(:numero)
			end
		when "Contabilidade::EstornoDePagamento"
			if self.modulo.present?
				self.try(:modulo).try(:pagamento).try(:numero)
			end
		when "Contabilidade::TalaoDeReceita"
			if self.modulo.present? && self.try(:modulo).try(:extra_orcamentario?) && self.try(:modulo).try(:conta_extra_orcamentaria).present?
				self.try(:modulo).try(:numero_do_talao)
			else
				'000'
			end
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			if self.modulo.present? && self.try(:modulo).try(:talao_de_receita).try(:extra_orcamentario?) && self.try(:modulo).try(:talao_de_receita).try(:conta_extra_orcamentaria).present?
				self.try(:modulo).try(:talao_de_receita).try(:numero_do_talao)
			else
				'000'
			end
		when "Contabilidade::DespesaExtraOrcamentaria"
			if self.modulo.present? && self.try(:modulo).try(:conta_extra_orcamentaria).present?
				self.try(:modulo).try(:despesa_extra_orcamentaria).try(:numero_de_caixa)
			else
				'000'
			end
		when "Contabilidade::TransferenciaFinanceira"
			if self.modulo.present?
				if self.modulo.try(:pagamento_da_retencao).try(:retencao).try(:conta_extra_orcamentaria).present?
					self.try(:modulo).try(:transferencia_financeira).try(:numero_da_transferencia)
				else
					'000'
				end
			else
				'000'
			end
		when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
			if self.modulo.present? && self.try(:modulo).try(:despesa_extra_orcamentaria).try(:conta_extra_orcamentaria).present?
				self.modulo.try(:despesa_extra_orcamentaria).try(:numero_de_caixa)
			else
				'000'
			end
		else
			'000'
		end
	end

	def ordem_dos_movimentos_para_relatorio
		#os numeros nessa função são a ordem os tipos de movimento, solicitado pela Eduarda
		case modulo_type
		when "Base::ContaBancariaPorUnidadeOrcamentaria"
			return 1
		when "Contabilidade::Pagamento"
			return 4
		when "Contabilidade::EstornoDePagamento"
			return 5
		when "Contabilidade::TalaoDeReceita"
			if self.valor < 0
				return 10
			else
				return 2	
			end
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			return 6
		when "Contabilidade::DespesaExtraOrcamentaria"
			return 7
		when "Contabilidade::TransferenciaFinanceira"
			return 3
		when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
			return 8
		else
			return 9
		end
	end

	def show_do_objeto
		return modulo&.talao_de_receita if modulo_type.eql?('Contabilidade::AnulacaoDoTalaoDeReceita')
		return modulo&.pagamento if modulo_type.eql?('Contabilidade::EstornoDePagamento')
		return modulo&.despesa_extra_orcamentaria if modulo_type.eql?('Contabilidade::EstornoDeDespesaExtraOrcamentaria')
		return modulo&.conta_bancaria if modulo_type.eql?('Base::ContaBancariaPorUnidadeOrcamentaria')
		modulo
	end

	def define_tipo_de_movimentacao
		tipo_de_movimentacao = valor > 0 ? 'credito' : 'debito'
	end

	def remove_conciliacoes
		self.conciliacoes.destroy_all
	end
	
	def descricao_movimentacao_de_pagamento
		historico = ["Pagamento"]
		if self.modulo.present?
			if self.modulo.resto_a_pagar
				historico.push("de Restos a Pagar")
			end
			
			if self.modulo.numero.present?
				historico.push("Nº: #{self.modulo.numero}")
			end

			if self.modulo.credor.present?
				historico.push("Credor: #{self.modulo.try(:credor).try(:nome_e_cpf_ou_cnpj).try(:to_s)}")
			end

			if self.modulo.liquidacao.present?
				if self.modulo.liquidacao.nota_fiscal.present?
					historico.push("NF: #{self.modulo.liquidacao.nota_fiscal.numero_da_nota}")
				end
			end
		end
		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_de_transferencia_financeira
		historico = []
		if self.modulo.present?
			if self.modulo.pagamento_da_retencao.present?
				if self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_origem.id
					historico.push("Transferencia Financeira")
					if self.modulo.conta_bancaria_destino.numero_agencia_e_banco.present?
						historico.push("para #{self.modulo.conta_bancaria_destino.numero_agencia_e_banco}")
					end

				elsif self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_destino.id
					historico.push("Recebimento de Transferência")
					if self.modulo.conta_bancaria_origem.numero_agencia_e_banco.present?
						historico.push("da #{self.modulo.conta_bancaria_origem.numero_agencia_e_banco}")
					end
				end

				historico.push("ref a retenção")
				if self.modulo.pagamento_da_retencao.retencao.try(:conta_extra_orcamentaria).present?
					historico.push(" de #{self.modulo.pagamento_da_retencao.retencao.conta_extra_orcamentaria.try(:codigo_completo_e_descricao)}")
				end

				if self.modulo.pagamento_da_retencao.pagamento.present?
					historico.push("do pagamento #{self.modulo.pagamento_da_retencao.pagamento.try(:numero)}")
					if self.modulo.pagamento_da_retencao.pagamento.credor.present?
						historico.push("- Credor: #{self.modulo.pagamento_da_retencao.pagamento.credor.try(:nome_e_cpf_ou_cnpj).try(:to_s)}")
					end
				end
			else
				if self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_origem.id
					historico.push("Transferencia Financeira")
					if self.modulo.conta_bancaria_destino.numero_agencia_e_banco.present?
						historico.push("para #{self.modulo.conta_bancaria_destino.numero_agencia_e_banco}")
					end

				elsif self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_destino.id
					historico.push("Recebimento de Transferência")
					if self.modulo.conta_bancaria_origem.numero_agencia_e_banco.present?
						historico.push("da #{self.modulo.conta_bancaria_origem.numero_agencia_e_banco}")
					end
				end
			end
		else
			historico.push("#{self.historico}")
		end

		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_estorno_de_pagamento
		historico = ["Estorno de Pagamento"]
		if self.modulo.present?
			if self.modulo.pagamento.present?
				if self.modulo.pagamento.resto_a_pagar
					historico.push("de Restos a Pagar")
				end
				historico.push("Nº #{self.modulo.pagamento.numero}")

				if self.modulo.pagamento.credor.present?
					historico.push("#{self.modulo.pagamento.try(:credor).try(:nome_e_cpf_ou_cnpj).try(:to_s)}")
				end

				if self.modulo.pagamento.liquidacao.present?
					if self.modulo.pagamento.liquidacao.nota_fiscal.present?
						historico.push("NF: #{self.modulo.pagamento.liquidacao.nota_fiscal.numero_da_nota}")
					end
				end

				if self.modulo.justificativa.present?
					historico.push("Justificativa: #{self.modulo.justificativa}")
				end
			end
		end
		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_estorno_despesa_extra
		historico = ["Estorno do Pagamento Extraorçamentário"]
		if self.modulo.present?
			if self.modulo.despesa_extra_orcamentaria.present? 
				historico.push("Nº #{self.modulo.despesa_extra_orcamentaria.try(:numero_de_caixa)}")
				
				if self.modulo.despesa_extra_orcamentaria.conta_extra_orcamentaria.present?
					historico.push("Conta: #{self.modulo.conta_extra_orcamentaria.codigo_completo_e_descricao}")
				end

				if self.modulo.despesa_extra_orcamentaria.pessoa.present?.try(:nome)
					historico.push("Credor: #{self.modulo.despesa_extra_orcamentaria.pessoa.try(:nome)}")
				end

				if self.modulo.justificativa.present?
					historico.push("Historico: #{self.modulo.justificativa}")
				end
			end
		end
		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_talao_de_receita
		historico = ["Receita"]
		if self.modulo.present?

			#Receita orçamentaria Nº XXXXXX - Contribuinte: José Fulano - Historico: XPTO
			if self.modulo.orcamentario?
				historico.push("orçamentaria")
				if self.modulo.numero_do_talao.present?
					historico.push("Nº #{self.modulo.numero_do_talao}")
				end
				if self.modulo.pessoa.present?
					historico.push("- Contribuinte: #{self.modulo.pessoa.nome}")
				end
				if self.modulo.historico.present?
					historico.push("- Historico: #{self.modulo.historico}")
				end
			end

			#Receita extraorçamentaria Conta: 011 - CHAMAGAS Nº XXXXXX  - Contribuinte: José Fulano - Historico: XPTO
			if self.modulo.extra_orcamentario?
				historico.push("extraorçamentaria")
				if self.modulo.numero_do_talao.present?
					historico.push("Nº #{self.modulo.numero_do_talao}")
				end
				if self.modulo.conta_extra_orcamentaria.present?
					historico.push(" Conta: #{self.modulo.conta_extra_orcamentaria.codigo_completo_e_descricao}")
				end
				if self.modulo.retencao.present?
					if self.modulo.retencao.descricao_imposto.present?
						historico.push("#{self.modulo.retencao.descricao_imposto}")
					end
				end	
				if self.modulo.pessoa.present?
					historico.push("- Contribuinte: #{self.modulo.pessoa.nome}")
				end
				if self.modulo.historico.present?
					historico.push("- Historico: #{self.modulo.historico}")
				end
			end

		end
		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_anulacao_de_receita
		historico = ["Anulação de Receita"]
		if self.modulo.present?
			if self.modulo.talao_de_receita.present?
				if self.modulo.talao_de_receita.orcamentario?
					historico.push("orçamentaria")
				elsif self.modulo.talao_de_receita.extra_orcamentario?
					historico.push("extraorçamentaria")
					if self.modulo.talao_de_receita.conta_extra_orcamentaria.present?
						historico.push("- Conta: #{self.modulo.talao_de_receita.conta_extra_orcamentaria.try(:codigo_completo_e_descricao)}")
					end
				end

				if self.modulo.talao_de_receita.numero_do_talao.present?
					historico.push("Nº #{self.modulo.talao_de_receita.numero_do_talao}")
				end
				if self.modulo.historico.present?
					historico.push("- Historico: #{self.modulo.historico}")
				end
			end
		end
		return historico.join(" ") rescue historico.first
	end

	def descricao_movimentacao_despesa_extra
		historico = ["Pagamento extraorçamentario"]
		if self.modulo.present?
			if self.modulo.numero_de_caixa.present?
				historico.push("Nº #{self.modulo.numero_de_caixa}")
			end
			if self.modulo.pagamento_da_retencao.present? && self.modulo.try(:pagamento_da_retencao).try(:retencao).present?
				historico.push("#{self.modulo.try(:pagamento_da_retencao).try(:retencao).try(:descricao_imposto)}")
			end
			if self.modulo.conta_extra_orcamentaria.present?
				historico.push("- #{self.modulo.conta_extra_orcamentaria.try(:codigo_completo_e_descricao)}")
			end
			if self.modulo.pessoa.present?
				historico.push("Credor: #{self.modulo.pessoa.try(:nome)}")
			end
		end
		return historico.join(" ") rescue historico.first
	end

	def atualizar_saldo_inicial_dos_exercicios_posteriores
		if contexto_atual.present?
		# atualiza o saldo_inicial do próximo exercicio quando houver alteração de movimentação no exercicio anterior
			maior_exercicio = Orcamento.order("exercicio").last&.exercicio
			proximo_orcamento_exercicio = contexto_atual.exercicio.to_i + 1

			if maior_exercicio.to_i > 0 && maior_exercicio.to_i > contexto_atual.exercicio # só executar se existir novos orçamentos
				for i in proximo_orcamento_exercicio..maior_exercicio
					# orcamento a ser atualizado
					proximo_orcamento = Orcamento.find_by(exercicio: i)
					# orcamento com movimentacação realizada
					orcamento = Orcamento.find_by(exercicio: proximo_orcamento_exercicio - 1)
					# pesquisa movimentacao inicial
					movimentacao_inicial = self.conta_bancaria.movimentacoes_da_conta_bancaria.do_exercicio_atual(proximo_orcamento).por_movimentacao_inicial.first
					# atualiza saldo inicial
					movimentacao_inicial.update_column(:valor, conta_bancaria.try(:saldo_do_exercicio, orcamento).to_d) if movimentacao_inicial.present?
				end
			end
		end
	end

	def recebimento?
		self.conta_bancaria_por_unidade_orcamentaria.id == self.modulo.conta_bancaria_destino.id
	end

	def agrupamento_para_cada_tipo
		case modulo_type
			when "Base::ContaBancariaPorUnidadeOrcamentaria"
				return self.historico
			when "Contabilidade::Pagamento"
				return ["#{self.try(:modulo).try(:credor).try(:nome)}"]
			when "Contabilidade::EstornoDePagamento"
				return ["#{self.try(:modulo).pagamento.try(:credor).try(:nome)}"]
			when "Contabilidade::TalaoDeReceita"
				if self.modulo.present? && self.try(:modulo).try(:extra_orcamentario?) && self.try(:modulo).try(:conta_extra_orcamentaria).present?
					return [self&.modulo&.conta_extra_orcamentaria&.codigo_completo_e_descricao, "Extraorçamentarias", self&.modulo&.pessoa&.nome]
				else
					return [self&.modulo&.try(:natureza_da_receita).try(&:descricao), "Orçamentarias", self&.modulo&.pessoa&.nome]
				end
			when "Contabilidade::AnulacaoDoTalaoDeReceita"
				if self.modulo.talao_de_receita.present? && self.try(:modulo).try(:talao_de_receita).try(:extra_orcamentario?) && self.try(:modulo).try(:talao_de_receita).try(:conta_extra_orcamentaria).present?
					return [self&.modulo&.talao_de_receita&.conta_extra_orcamentaria&.codigo_completo_e_descricao, "Extraorçamentarias", self&.modulo&.talao_de_receita&.pessoa&.nome]
				else
					return [self&.modulo&.talao_de_receita&.try(:natureza_da_receita).try(&:descricao), "Orçamentarias", self&.modulo&.talao_de_receita&.pessoa&.nome]
				end
			when "Contabilidade::DespesaExtraOrcamentaria"
				return ["#{self.try(:modulo).try(:pessoa).try(:nome)}", "#{self.try(:modulo).try(:conta_extra_orcamentaria).try(:codigo_completo_e_descricao)}"]
			when "Contabilidade::EstornoDeDespesaExtraOrcamentaria"
				return ["#{self.try(:modulo).try(:despesa_extra_orcamentaria).try(:pessoa).try(:nome)}", "#{self.try(:modulo).try(:despesa_extra_orcamentaria).try(:conta_extra_orcamentaria).try(:codigo_completo_e_descricao)}"]
			when "Contabilidade::TransferenciaFinanceira"
				if self.recebimento?
					return ["#{self.modulo.conta_bancaria_origem.numero_agencia_e_banco}", "#{self.modulo&.pagamento_da_retencao&.pagamento&.credor.try(:nome_e_cpf_ou_cnpj).try(:to_s)}", "#{self.modulo&.pagamento_da_retencao&.retencao&.conta_extra_orcamentaria.try(:codigo_completo_e_descricao)}", "recebimentos"]
				else
					return ["#{self.modulo.conta_bancaria_destino.numero_agencia_e_banco}", "#{self.modulo&.pagamento_da_retencao&.pagamento&.credor.try(:nome_e_cpf_ou_cnpj).try(:to_s)}", "#{self.modulo&.pagamento_da_retencao&.retencao&.conta_extra_orcamentaria.try(:codigo_completo_e_descricao)}", "transferencias"]
				end
			else
				return self.historico
		end
	end
end
