def test_gorr_royalty(self): pr = ProcessRoyalties() leaserm = DataStructure() calc = DataStructure() monthly = DataStructure() well_lease_link = DataStructure() rtp_info = DataStructure() monthly.ProdVol = 100.0 monthly.ProdHours = 10.0 monthly.TransRate = 0.1234 leaserm.TransDeducted = "All" leaserm.Gorr = "fixed,0,.02" well_lease_link.PEFNInterest = 1.0 rtp_info.Percent = 100.0 calc.RoyaltyPrice = 200.0 calc.TransGorralue = 0.0 calc.GorrRoyaltyValue = 0.0 calc.TransGorrValue = 0.0 pr.calc_gorr(leaserm, calc, monthly, well_lease_link, rtp_info) self.assertEqual(400.0, calc.GorrRoyaltyValue) self.assertEqual(0.25, calc.TransGorrValue) monthly.ProdVol = 100.0 rtp_info.Percent = 50.0 calc.TransGorrValue = 0.0 pr.calc_gorr(leaserm, calc, monthly, well_lease_link, rtp_info) self.assertEqual(200.0, calc.GorrRoyaltyValue) self.assertEqual(0.12, calc.TransGorrValue)
def test_evaluate_and_resolve_expression(self): expression = Expression() util = DatabaseUtilities() util.delete_lookups() util.insert_lookups('somevalue', 0, 2) util.insert_lookups('m.monthval', 201703, 4) monthly = DataStructure() monthly.ProdMonth = 201703 monthly.ProdVol = 100 monthly.SalesVol = 90 monthly.GJ = 1000 monthly.Heat = 65.01 s = "asdf =(prod + sales + gj + heat + somevalue + m.monthval) more stuff in here" self.assertEqual(1196 + 65.01, expression.evaluate_expression(s, monthly)) self.assertEqual( "asdf =(100 + 90 + 1000 + 65.01 + 2 + 4) more stuff in here", expression.resolve_expression(s, monthly)) s = "asdf =(prod + sales + gj + notfoundvalue) more stuff in here" self.assertRaises(AppError, expression.evaluate_expression, s, monthly)
def test_calc_sask_oil_prov_crown_deductions(self): pr = ProcessRoyalties() calc = DataStructure() calc.TransBaseValue = 0 calc.BaseRoyaltyRate = 0.1 m = DataStructure() m.TransRate = 0.123 m.ProdVol = 150.0 lease_royalty_master = DataStructure() lease_royalty_master.TransDeducted = "All" lease_royalty_master.CrownMultiplier = 1.0 fn_interest = 1.0 rp_interest = 100.0 # Note: this is a round even situation... it's questionable self.assertEqual( 1.84, pr.calc_sask_oil_prov_crown_deductions(m, fn_interest, rp_interest, lease_royalty_master, calc) ) lease_royalty_master.CrownMultiplier = 0.9 fn_interest = 0.8 rp_interest = 90.0 self.assertEqual( 1.2, pr.calc_sask_oil_prov_crown_deductions(m, fn_interest, rp_interest, lease_royalty_master, calc) )
def test_string_is_formula(self): expression = Expression() s = "prod + sales + gj" monthly = DataStructure() monthly.ProdVol = 100 monthly.SalesVol = 90 monthly.GJ = 1000 self.assertEqual(1190, expression.evaluate_expression(s, monthly)) self.assertEqual("100 + 90 + 1000", expression.resolve_expression(s, monthly))
def test_lookup_vars(self): expression = Expression() util = DatabaseUtilities() util.delete_lookups() util.insert_lookups('somevalue', 0, 1234) util.insert_lookups('m.monthval', 201703, 5678) monthly = DataStructure() monthly.ProdMonth = 201703 monthly.ProdVol = 100 monthly.SalesVol = 90 monthly.GJ = 1000 monthly.Heat = 65.01 monthly.SalesPrice = 50.00 monthly.TransRate = 10.00 monthly.ProcessingRate = 5.00 monthly.GCARate = 3.00 calc = DataStructure() calc.RoyaltyPrice = 27.12 rv = expression.lookup_vars( { "prod", "sales", "gj", "heat", "price", "trans", "processing", "gca", "royalty_price", "somevalue", "m.monthval" }, monthly, calc) self.assertEqual(100, rv["prod"]) self.assertEqual(90, rv["sales"]) self.assertEqual(1000, rv["gj"]) self.assertEqual(65.01, rv["heat"]) self.assertEqual(50, rv["price"]) self.assertEqual(10, rv["trans"]) self.assertEqual(5, rv["processing"]) self.assertEqual(3, rv["gca"]) self.assertEqual(27.12, rv["royalty_price"]) self.assertEqual(1234, rv["somevalue"]) self.assertEqual(5678, rv["m.monthval"]) self.assertRaises(AppError, expression.lookup_vars, {"notfooundvalue"}, monthly) monthly.GJ = None self.assertRaises(AppError, expression.lookup_vars, {"gj", "sales"}, monthly)
def test_calc_royalties(self): dbu = DatabaseUtilities() dbu.delete_all_tables() dbu.create_some_test_econdata() pr = ProcessRoyalties() well = DataStructure() royalty = DataStructure() calc = DataStructure() monthly = DataStructure() well_lease_link = DataStructure() rtp_info = DataStructure() monthly.Product = "OIL" monthly.ProdMonth = 201501 monthly.ProdVol = 100 monthly.ProdHours = 744 monthly.SalesPrice = 210.0 royalty.RoyaltyScheme = "SKProvCrownVar" royalty.OverrideRoyaltyClassification = None royalty.ValuationMethod = "ActSales" royalty.CrownModifier = None royalty.MinRoyaltyRate = None royalty.CrownMultiplier = 1.0 royalty.MinRoyaltyDollar = None royalty.TransDeducted = None well.CommencementDate = date(2015, 1, 22) well.RoyaltyClassification = "Old Oil" well.Classification = "Other" well.SRC = 0.0 well_lease_link.PEFNInterest = 1.0 rtp_info.Percent = 100.0 calc.SuppRoyaltyValue = 0.0 calc.GorrRoyaltyValue = 0.0 calc.TransGorrValue = 0.0 pr.calc_royalties(well, royalty, calc, monthly, well_lease_link, rtp_info) royalty.RoyaltyScheme = "IOGR1995" pr.calc_royalties(well, royalty, calc, monthly, well_lease_link, rtp_info) royalty.RoyaltyScheme = "IOGR1995,GORR" royalty.Gorr = "fixed,0,.02" pr.calc_royalties(well, royalty, calc, monthly, well_lease_link, rtp_info)
def test_calcSaskOilIOGR1995(self): m = DataStructure() # m.WellHeadPrice = 221.123456 m.SalesPrice = 221.123456 m.TransRate = 2.123455 m.ProcessingRate = 0.123455 m.ProdVol = 70 m.ProdMonth = 201501 calc = DataStructure() calc.BaseRoyaltyValue = 0.0 calc.CommencementPeriod = 0 calc.BaseRoyaltyVolume = 0.0 calc.RoyaltyPrice = 0.0 crown_multiplier = 1.2 fn_interest = 0.25 rp_interest = 100 pr = ProcessRoyalties() # all tests for SaskWellHead pr.calc_sask_oil_iogr1995( datetime(2015, 1, 1), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(464.36, calc.BaseRoyaltyValue) self.assertEqual(calc.CommencementPeriod, 0) self.assertEqual(calc.BaseRoyaltyVolume, 7) self.assertEqual(calc.RoyaltyPrice, 221.123456) m.ProdVol = 100 crown_multiplier = 0.25 fn_interest = 3 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2015, 4, 2), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 1990.11) m.ProdVol = 170 crown_multiplier = 1.0 fn_interest = 1 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2015, 5, 1), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 5881.88) m.ProdVol = 79.9 crown_multiplier = 3 fn_interest = 2 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2010, 1, 1), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 10600.66) m.ProdVol = 150 crown_multiplier = 2 fn_interest = 4 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2009, 7, 3), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 38917.73) m.ProdVol = 500 crown_multiplier = 1 fn_interest = 5 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2007, 8, 2), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 124271.38) m.ProdVol = 800 crown_multiplier = 5 fn_interest = 0.1 rp_interest = 100 pr.calc_sask_oil_iogr1995( datetime(2008, 9, 9), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 21117.29) m.ProdVol = 800 crown_multiplier = 5 fn_interest = 0.1 rp_interest = 50 pr.calc_sask_oil_iogr1995( datetime(2008, 9, 9), "SaskWellHead", crown_multiplier, fn_interest, rp_interest, m, calc ) self.assertEqual(calc.BaseRoyaltyValue, 10558.65)
def test_calc_sask_oil_prov_crown_royalty_volume_value(self): pr = ProcessRoyalties() m = DataStructure() m.ProdVol = 100 lease_rm = DataStructure() lease_rm.MinRoyaltyRate = 0.0 lease_rm.MinRoyaltyDollar = 0.0 lease_rm.CrownMultiplier = 1 lease_rm.ValuationMethod = "ActSales" lease_rm.CrownModifier = None calc = DataStructure() calc.BaseRoyaltyRate = 0.25 calc.BaseRoyaltyCalcRate = 0.25 calc.RoyaltyPrice = 210 calc.BaseRoyaltyVolume = 0.0 calc.BaseRoyaltyValue = 0.0 m.SalesPrice = 223.370366 m.TransRate = 2.123455 m.ProcessingRate = 0.123455 fn_interest = 1.0 rp_interest = 100.0 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyVolume, 0.0) self.assertEqual(calc.BaseRoyaltyValue, 5584.26) calc.BaseRoyaltyCalcRate = -0.01 calc.BaseRoyaltyRate = -0.01 lease_rm.MinRoyaltyRate = None pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyRate, 0) calc.BaseRoyaltyCalcRate = -0.01 calc.BaseRoyaltyRate = -0.01 lease_rm.MinRoyaltyRate = 0.02 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyRate, 0.02) self.assertEqual(calc.BaseRoyaltyValue, 446.74) lease_rm.MinRoyaltyDollar = 500.0 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyValue, 500.0) lease_rm.MinRoyaltyDollar = None lease_rm.MinRoyaltyRate = None calc.BaseRoyaltyCalcRate = 0.35 lease_rm.CrownModifier = 0.02 calc.BaseRoyaltyRate = None pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyRate, 0.37) # Reset to normal again lease_rm.CrownModifier = 0.0 calc.BaseRoyaltyCalcRate = 0.25 calc.RoyaltyPrice = 210 calc.BaseRoyaltyVolume = 0.0 calc.BaseRoyaltyValue = 0.0 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyVolume, 0.0) self.assertEqual(calc.BaseRoyaltyValue, 5584.26) m.ProdVol = 100 rp_interest = 50.0 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyVolume, 0.0) self.assertEqual(calc.BaseRoyaltyValue, 2792.13) m.ProdVol = 100 rp_interest = 50.0 fn_interest = 0.5 pr.calc_sask_oil_prov_crown_royalty_volume_value(m, fn_interest, rp_interest, lease_rm, calc) self.assertEqual(calc.BaseRoyaltyVolume, 0.0) self.assertEqual(calc.BaseRoyaltyValue, 1396.06)