ActiveRecord::Base.transaction do
	begin
		# PROJEÇÃO DE RECEITA
		ppa = Ppa::Ppa.find_by(exercicio_inicial: 2018) || Ppa::Ppa.create!(prefeito: 'Prefeito Demonstração', vice_prefeito: 'Vice Prefeito Demonstração', exercicio_inicial: 2018, exercicio_final: 2021)
		projecao_de_receita_2018_2021 = ppa.projecao_de_receita

		Projecao::Receita.importar_receitas_dos_orcamentos_anteriores( projecao_de_receita_2018_2021 )

		# ÍNDICES
		ipca = Projecao::IndiceDeProjecao.find_by!( {nome: 'IPCA'} )

		pibn = Projecao::IndiceDeProjecao.find_by( {nome: 'PIB Nacional'} )

		mord = Projecao::IndiceDeProjecao.find_by( {nome: 'Modernização Administrativa'} )

		correntes = projecao_de_receita_2018_2021.receitas.where("codigo like '1%'").analiticas
		calculos 	= Projecao::CalculoPorExercicio.where( receita_id: correntes.map(&:id) )
		calculos.each { |calculo| calculo.update( total: Random.rand( 5000..500000 ) ) }
		correntes_ids = []
		correntes.each { |corrente| correntes_ids << { receita_id: corrente.id } }

		capital 	= projecao_de_receita_2018_2021.receitas.where("codigo like '2%'").analiticas
		calculos 	= Projecao::CalculoPorExercicio.where( receita_id: capital.map(&:id) )
		calculos.each { |calculo| calculo.update( total: Random.rand( 5000..500000 ) ) }
		capital_ids = []
		capital.each { |capital| capital_ids << { receita_id: capital.id } }

		correntes_intra = projecao_de_receita_2018_2021.receitas.where("codigo like '7%'").analiticas
		calculos 	= Projecao::CalculoPorExercicio.where( receita_id: correntes_intra.map(&:id) )
		calculos.each { |calculo| calculo.update( total: Random.rand( 5000..500000 ) ) }
		correntes_intra_ids = []
		correntes_intra.each { |corrente_intra| correntes_intra_ids << { receita_id: corrente_intra.id } }

		capital_intra = projecao_de_receita_2018_2021.receitas.where("codigo like '8%'").analiticas
		calculos 	= Projecao::CalculoPorExercicio.where( receita_id: capital_intra.map(&:id) )
		calculos.each { |calculo| calculo.update( total: Random.rand( 5000..500000 ) ) }
		capital_intra_ids = []
		capital_intra.each { |cap_intra| capital_intra_ids << { receita_id: cap_intra.id } }

		deducoes 	= projecao_de_receita_2018_2021.receitas.where("codigo like '9%'").analiticas
		calculos 	= Projecao::CalculoPorExercicio.where( receita_id: deducoes.map(&:id) )
		calculos.each { |calculo| calculo.update( total: Random.rand( 5000..500000 ) ) }
		deducoes_ids = []
		deducoes.each { |deducao| deducoes_ids << { receita_id: deducao.id } }

		# CÁLCULOS DE PROJEÇÃO 2017 - 2018
		calc_proj_2017_2018_correntes = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2017, exercicio_destino: 2018)
		calc_proj_2017_2018_capital		= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2017, exercicio_destino: 2018)
		calc_proj_2017_2018_crr_intra = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2017, exercicio_destino: 2018)
		calc_proj_2017_2018_cap_intra	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2017, exercicio_destino: 2018)
		calc_proj_2017_2018_deducoes	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2017, exercicio_destino: 2018)

		# ASSOCIANDO OS TIPOS DE ÍNDICE AOS CÁLCULOS
		[calc_proj_2017_2018_correntes, calc_proj_2017_2018_capital, calc_proj_2017_2018_crr_intra, calc_proj_2017_2018_cap_intra, calc_proj_2017_2018_deducoes].each { |calculo|
			calculo.indices_do_calculo_de_projecao.create!(
				[
					{indice_de_projecao_id: ipca.id, percentual: Random.rand( 1..5 )},
					{indice_de_projecao_id: pibn.id, percentual: Random.rand( 1..3 )},
					{indice_de_projecao_id: mord.id, percentual: Random.rand( 1..2 )}
				]
			)
		}

		# ASSOCIANDO AS RECEITAS AOS CÁLCULOS
		calc_proj_2017_2018_correntes.receitas_dos_calculos_de_projecao.create!(correntes_ids)
		calc_proj_2017_2018_capital.receitas_dos_calculos_de_projecao.create!(capital_ids)
		calc_proj_2017_2018_crr_intra.receitas_dos_calculos_de_projecao.create!(correntes_intra_ids)
		calc_proj_2017_2018_cap_intra.receitas_dos_calculos_de_projecao.create!(capital_intra_ids)
		calc_proj_2017_2018_deducoes.receitas_dos_calculos_de_projecao.create!(deducoes_ids)




		# CÁLCULOS DE PROJEÇÃO 2018 - 2019
		calc_proj_2018_2019_correntes = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2018, exercicio_destino: 2019)
		calc_proj_2018_2019_capital		= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2018, exercicio_destino: 2019)
		calc_proj_2018_2019_crr_intra = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2018, exercicio_destino: 2019)
		calc_proj_2018_2019_cap_intra	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2018, exercicio_destino: 2019)
		calc_proj_2018_2019_deducoes	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2018, exercicio_destino: 2019)

		# ASSOCIANDO OS TIPOS DE ÍNDICE AOS CÁLCULOS
		[calc_proj_2018_2019_correntes, calc_proj_2018_2019_capital, calc_proj_2018_2019_crr_intra, calc_proj_2018_2019_cap_intra, calc_proj_2018_2019_deducoes].each { |calculo|
			calculo.indices_do_calculo_de_projecao.create!(
				[
					{indice_de_projecao_id: ipca.id, percentual: Random.rand( 1..5 )},
					{indice_de_projecao_id: pibn.id, percentual: Random.rand( 1..3 )},
					{indice_de_projecao_id: mord.id, percentual: Random.rand( 1..2 )}
				]
			)
		}

		# ASSOCIANDO AS RECEITAS AOS CÁLCULOS
		calc_proj_2018_2019_correntes.receitas_dos_calculos_de_projecao.create!(correntes_ids)
		calc_proj_2018_2019_capital.receitas_dos_calculos_de_projecao.create!(capital_ids)
		calc_proj_2018_2019_crr_intra.receitas_dos_calculos_de_projecao.create!(correntes_intra_ids)
		calc_proj_2018_2019_cap_intra.receitas_dos_calculos_de_projecao.create!(capital_intra_ids)
		calc_proj_2018_2019_deducoes.receitas_dos_calculos_de_projecao.create!(deducoes_ids)





		# CÁLCULOS DE PROJEÇÃO 2019 - 2020
		calc_proj_2019_2020_correntes = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2019, exercicio_destino: 2020)
		calc_proj_2019_2020_capital		= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2019, exercicio_destino: 2020)
		calc_proj_2019_2020_crr_intra = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2019, exercicio_destino: 2020)
		#calc_proj_2019_2020_cap_intra	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2019, exercicio_destino: 2020)
		calc_proj_2019_2020_deducoes	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2019, exercicio_destino: 2020)

		# ASSOCIANDO OS TIPOS DE ÍNDICE AOS CÁLCULOS
		#calc_proj_2019_2020_cap_intra,
		[calc_proj_2019_2020_correntes, calc_proj_2019_2020_capital, calc_proj_2019_2020_crr_intra,  calc_proj_2019_2020_deducoes].each { |calculo|
			calculo.indices_do_calculo_de_projecao.create!(
				[
					{indice_de_projecao_id: ipca.id, percentual: Random.rand( 1..5 )},
					{indice_de_projecao_id: pibn.id, percentual: Random.rand( 1..3 )},
					{indice_de_projecao_id: mord.id, percentual: Random.rand( 1..2 )}
				]
			)
		}

		# ASSOCIANDO AS RECEITAS AOS CÁLCULOS
		calc_proj_2019_2020_correntes.receitas_dos_calculos_de_projecao.create!(correntes_ids)
		calc_proj_2019_2020_capital.receitas_dos_calculos_de_projecao.create!(capital_ids)
		calc_proj_2019_2020_crr_intra.receitas_dos_calculos_de_projecao.create!(correntes_intra_ids)
		#calc_proj_2019_2020_cap_intra.receitas_dos_calculos_de_projecao.create!(capital_intra_ids)
		calc_proj_2019_2020_deducoes.receitas_dos_calculos_de_projecao.create!(deducoes_ids)






		# CÁLCULOS DE PROJEÇÃO 2020 - 2021
		calc_proj_2020_2021_correntes = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2020, exercicio_destino: 2021)
		calc_proj_2020_2021_capital		= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2020, exercicio_destino: 2021)
		calc_proj_2020_2021_crr_intra = Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2020, exercicio_destino: 2021)
		#calc_proj_2020_2021_cap_intra	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2020, exercicio_destino: 2021)
		calc_proj_2020_2021_deducoes	= Projecao::CalculoDeProjecao.create!(projecao_de_receita_id: projecao_de_receita_2018_2021.id, exercicio_base: 2020, exercicio_destino: 2021)

		# ASSOCIANDO OS TIPOS DE ÍNDICE AOS CÁLCULOS
		# calc_proj_2020_2021_cap_intra,
		[calc_proj_2020_2021_correntes, calc_proj_2020_2021_capital, calc_proj_2020_2021_crr_intra, calc_proj_2020_2021_deducoes].each { |calculo|
			calculo.indices_do_calculo_de_projecao.create!(
				[
					{indice_de_projecao_id: ipca.id, percentual: Random.rand( 1..5 )},
					{indice_de_projecao_id: pibn.id, percentual: Random.rand( 1..3 )},
					{indice_de_projecao_id: mord.id, percentual: Random.rand( 1..2 )}
				]
			)
		}

		# ASSOCIANDO AS RECEITAS AOS CÁLCULOS
		calc_proj_2020_2021_correntes.receitas_dos_calculos_de_projecao.create!(correntes_ids)
		calc_proj_2020_2021_capital.receitas_dos_calculos_de_projecao.create!(capital_ids)
		calc_proj_2020_2021_crr_intra.receitas_dos_calculos_de_projecao.create!(correntes_intra_ids)
		#calc_proj_2020_2021_cap_intra.receitas_dos_calculos_de_projecao.create!(capital_intra_ids)
		calc_proj_2020_2021_deducoes.receitas_dos_calculos_de_projecao.create!(deducoes_ids)

		convenio_com_receita = Ppa::Convenio.find_by(numero_do_convenio: "30963/2016")
		convenio_com_receita.receita_corrente_id = Projecao::Receita.find_by(codigo: "1721990000").id
		convenio_com_receita.receita_de_capital_id = Projecao::Receita.find_by(codigo: "2421010000").id
		convenio_com_receita.save


	rescue Exception => e
		p "#{e.message}"
		raise ActiveRecord::Rollback
	end
end
