require 'active_support/concern'

module SeedContasExtraorcamentarias extend ActiveSupport::Concern
	def cria_contas_extraorcamentarias
		exercicio_anterior = self.exercicio.to_i - 1
		orcamento_anterior = Orcamento.find_by(exercicio: exercicio_anterior)


		conta = self.contas.find_by(codigo: "218820100")

		unless conta.nil?
			subconta = conta.contas_filho.find_by(codigo: "218820101")
			conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: "RPPS a Recolher") if orcamento_anterior.present?

			if subconta.present?
				nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by(descricao: "RPPS a Recolher", tipo_de_conta: "conta_extra_intra_orcamentaria", detalhamento: conta, subconta: subconta, codigo_sim: "contribuicao_previdenciaria_regime_proprio", saldo_inicial: 0, padrao: true)

				if nova_conta_rpps.nil?
					nova_conta_rpps = self.contas_extra_orcamentarias.create(descricao: "RPPS a Recolher", tipo_de_conta: "conta_extra_intra_orcamentaria", detalhamento: conta, subconta: subconta, codigo_sim: "contribuicao_previdenciaria_regime_proprio", saldo_inicial: 0, padrao: true)
				end

				if conta_anterior_rpps.present? && conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.present?
					conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
						cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
						cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
						unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

						if unidade_nova.blank?
							unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
						end
						if unidade_nova.present?
							nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo: unidade_da_conta.saldo )
						end
					end
				end
			else
				p "Não existe subconta codigo: 218820101!"  unless Rails.env.test?
			end
		end

		# 2.1.8.8.1.00.00 - Conta Extra
		# 2.1.8.8.1.01.00 CONSIGNAÇÕES
		conta = self.contas.find_by(codigo: "218810100")
		unless conta.nil?
			# 2.1.8.8.1.01.05	INDENIZAÇÕES E RESTITUIÇÕES
			subconta = conta.contas_filho.find_by(codigo: "218810105")

			if subconta.present?
				["Indenizações", "Restituições"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810105!" unless Rails.env.test?
			end

			# 2.1.8.8.1.01.10	PENSAO ALIMENTICIA
			subconta = conta.contas_filho.find_by(codigo: "218810110")
			if subconta.present?
				["Pensão Alimentícia"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810110!" unless Rails.env.test?
			end

			# 2.1.8.8.1.01.13	RETENÇÕES - ENTIDADES REPRESENTATIVAS DE CLASSES
			subconta = conta.contas_filho.find_by(codigo: "218810113")
			if subconta.present?
				["Sindicato dos Professores", "Sindicado dos Servidores"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810113!" unless Rails.env.test?
			end

			# 2.1.8.8.1.01.16	RETENÇÃO RELATIVA A VALE TRANSPORTE
			subconta = conta.contas_filho.find_by(codigo: "218810116")
			if subconta.present?
				["Vale Transporte"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810116!" unless Rails.env.test?
			end

			# 2.1.8.8.1.01.17	RETENÇÃO RELATIVA A VALE ALIMENTAÇÃO
			subconta = conta.contas_filho.find_by(codigo: "218810117")
			if subconta.present?
				["Vale Alimentação"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "salario_familia", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810117!" unless Rails.env.test?
			end

			# 2.1.8.8.1.01.99	OUTROS CONSIGNATARIOS
			subconta = conta.contas_filho.find_by(codigo: "218810199")
			if subconta.present?
				conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: "Salário Família") if orcamento_anterior.present?
				nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: "Salário Família", tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "salario_familia", saldo_inicial: 0, padrao: true)

				if conta_anterior_rpps.present?
					conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
						cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
						cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
						unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

						if unidade_nova.blank?
							unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
						end

						if unidade_nova.present?
							nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
						end
					end
				end

				conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: "Salário Maternidade") if orcamento_anterior.present?
				nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: "Salário Maternidade", tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "salario_maternidade", saldo_inicial: 0, padrao: true)

				if conta_anterior_rpps.present?
					conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
						cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
						cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
						unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

						if unidade_nova.blank?
							unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
						end

						if unidade_nova.present?
							nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
						end
					end
				end

				conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: "PASEP") if orcamento_anterior.present?
				nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: "PASEP", tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "pasep", saldo_inicial: 0, padrao: true)

				if conta_anterior_rpps.present?
					conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
						cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
						cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
						unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

						if unidade_nova.blank?
							unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
						end

						if unidade_nova.present?
							nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810199!" unless Rails.env.test?
			end
		else
			p "Não existe conta codigo: 218810100!" unless Rails.env.test?
		end

		if self.exercicio.to_i < 2022
			# 2.1.8.8.1.00.00 - Conta Extra
			# 2.1.8.8.1.01.00 CONSIGNAÇÕES
			conta = self.contas.find_by(codigo: "218810100")
			unless conta.nil?
				# 2.1.8.8.1.01.02	CONTRIBUIÇÃO AO RGPS
				subconta = conta.contas_filho.find_by(codigo: "218810102")
				["INSS a Recolher", "INSS Terceiros"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					if subconta.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "contribuicao_previdenciaria_inss", saldo_inicial: 0, padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					else
						p "Não existe subconta codigo: 218810102!" unless Rails.env.test?
					end
				end

				# 2.1.8.8.1.01.04	IMPOSTO SOBRE A RENDA RETIDO NA FONTE - IRRF
				subconta = conta.contas_filho.find_by(codigo: "218810104")
				if subconta.present?
					["IRRF – Retido na Fonte *"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps =  self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "irrf", saldo_inicial: 0, retencao_para: "IRPF", padrao: true)
						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end

					["IRRF Outros Rendimentos *"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "irrf", saldo_inicial: 0, retencao_para: "IRPJ", padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end
				else
					p "Não existe subconta codigo: 218810104!" unless Rails.env.test?
				end

				#2.1.8.8.1.01.08	 ISS
				subconta = conta.contas_filho.find_by(codigo: "218810108")
				if subconta.present?
					["ISS"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "iss", saldo_inicial: 0, retencao_para: "ISS", padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end
				else
					p "Não existe subconta codigo: 218810108!" unless Rails.env.test?
				end
			else
				p "Não existe conta codigo: 218810100!" unless Rails.env.test?
			end
		else
			# 2.1.8.8.1.00.00 - Conta Extra
			# 2.1.8.8.1.01.00 CONSIGNAÇÕES
			conta = self.contas.find_by(codigo: "218820100")
			unless conta.nil?
				# 2.1.8.8.2.01.02	CONTRIBUIÇÃO AO RGPS
				subconta = conta.contas_filho.find_by(codigo: "218820102")

				["INSS a Recolher", "INSS Terceiros"].each do |descricao|
					conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
					if subconta.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "contribuicao_previdenciaria_inss", saldo_inicial: 0, padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					else
						p "Não existe subconta codigo: 218820102!" unless Rails.env.test?
					end
				end

				# 2.1.8.8.2.01.04	IMPOSTO SOBRE A RENDA RETIDO NA FONTE - IRRF
				subconta = conta.contas_filho.find_by(codigo: "218820104")
				if subconta.present?
					["IRRF – Retido na Fonte *"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps =  self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "irrf", saldo_inicial: 0, retencao_para: "IRPF", padrao: true)
						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end

					["IRRF Outros Rendimentos *"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "irrf", saldo_inicial: 0, retencao_para: "IRPJ", padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end

				else
					p "Não existe subconta codigo: 218820104!" unless Rails.env.test?
				end

				#2.1.8.8.2.01.08	 ISS
				subconta = conta.contas_filho.find_by(codigo: "218820108")
				if subconta.present?
					["ISS"].each do |descricao|
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao) if orcamento_anterior.present?
						nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "iss", saldo_inicial: 0, retencao_para: "ISS", padrao: true)

						if conta_anterior_rpps.present?
							conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
								cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
								cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
								unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

								if unidade_nova.blank?
									unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
								end

								if unidade_nova.present?
									nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
								end
							end
						end
					end
				else
					p "Não existe subconta codigo: 218820108!" unless Rails.env.test?
				end
			else
				p "Não existe conta codigo: 218820100!" unless Rails.env.test?
			end
		end

		# 2.1.8.8.1.99.00 Outros Valores Restituíveis
		# não tem subconta
		conta = self.contas.find_by(codigo: "218819900")
		unless conta.nil?
			conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: "Faltas*") if orcamento_anterior.present?
			nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: "Faltas*", tipo_de_conta: "conta_extra", detalhamento: conta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

			if conta_anterior_rpps.present?
				conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
					cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
					cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
					unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

					if unidade_nova.blank?
						unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
					end

					if unidade_nova.present?
						nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
					end
				end
			end
		else
			p "Não existe conta codigo: 218810400!" unless Rails.env.test?
		end

		# 2.1.8.8.1.04.00 DEPOSITOS NAO JUDICIAIS
		# 2.1.8.8.1.04.99	 OUTROS DEPOSITOS
		conta = self.contas.find_by(codigo: "218810400")
		unless conta.nil?
			subconta = conta.contas_filho.find_by(codigo: "218810499")
			if subconta.present?
				["Multas*"].each do |descricao|
					if orcamento_anterior.present?
						conta_anterior_rpps = orcamento_anterior.contas_extra_orcamentarias.find_by(descricao: descricao)
					end
					nova_conta_rpps = self.contas_extra_orcamentarias.find_or_create_by!(descricao: descricao, tipo_de_conta: "conta_extra", detalhamento: conta, subconta: subconta, codigo_sim: "outros", saldo_inicial: 0, padrao: true)

					if conta_anterior_rpps.present?
						conta_anterior_rpps.contas_extra_por_unidades_orcamentarias.each do |unidade_da_conta|
							cod_orgao = unidade_da_conta.unidade_orcamentaria.orgao.codigo
							cod_unidade = unidade_da_conta.unidade_orcamentaria.codigo
							unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

							if unidade_nova.blank?
								unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', unidade_da_conta.unidade_orcamentaria.id)
							end

							if unidade_nova.present?
								nova_conta = nova_conta_rpps.contas_extra_por_unidades_orcamentarias.find_or_create_by!(unidade_orcamentaria_id: unidade_nova.id, conta_extra_orcamentaria_id: nova_conta_rpps.id, saldo:unidade_da_conta.saldo )
							end
						end
					end
				end
			else
				p "Não existe subconta codigo: 218810499!" unless Rails.env.test?
			end
		else
			p "Não existe conta codigo: 218810400!" unless Rails.env.test?
		end

		# COPIA TODAS AS DEMAIS CONTAS CADASTRADAS NO EXERCICIO ANTERIOR
		orcamento_atual = Orcamento.find_by(exercicio: self.exercicio.to_i)
		if orcamento_anterior.present? && orcamento_atual.present?
			orcamento_anterior.contas_extra_orcamentarias.each do |conta|
				conta_anterior = orcamento_atual.contas_extra_orcamentarias.where("descricao = ?", conta.descricao).first
				unless conta_anterior.present?
					nova_conta = Contabilidade::ContaExtraOrcamentaria.new(
						orcamento: self,
				    descricao: conta.descricao,
				    saldo_inicial: 0,
				    padrao: conta.padrao,
				    retencao_para: conta.retencao_para,
				    detalhamento_id: conta.detalhamento_id,
				    subconta_id: conta.subconta_id,
				    tipo_de_conta: conta.tipo_de_conta,
				    # natureza_da_receita_id: conta.natureza_da_receita_id, # não é a mesma do exercicio atual
				    pessoa_id: conta.pessoa_id,
				    classe_pcasp: conta.classe_pcasp
					)
					nova_conta.save(validate: false)

					conta.contas_extra_por_unidades_orcamentarias.each do |conta_unidade|
						unidade_orcamentaria = self.unidades_orcamentarias.where("loa_unidades_orcamentarias.codigo = ? and loa_unidades_orcamentarias.nome = ?", conta_unidade.unidade_orcamentaria.codigo, conta_unidade.unidade_orcamentaria.nome).first
						if unidade_orcamentaria.present?
							nova_unidade = Contabilidade::ContaExtraPorUnidadeOrcamentaria.new(
								unidade_orcamentaria: unidade_orcamentaria,
								conta_extra_orcamentaria: nova_conta,
								saldo: 0
							)
							nova_unidade.save(validate: false)
						end
					end
				end

			end
		end

	end
end
