Function Declarations ()
Dim GrossProjectRevenue As Profile
Dim SumPSCTaxes As Profile
Dim NetProjectRevenue As Profile
Dim ProfitBasis As Profile
Dim Depreciation As Profile
Dim ExpensedCapex As Profile
Dim ExpensedOpex As Profile
Dim DeductibleTaxes As Profile
Dim Uplift As Profile
Dim TotalCost As Profile
Dim RecoveryLimit As Profile
Dim RecoveryLimitBasis As Profile
Dim RecoveryLimitTrigger As Profile
Dim RecoveryLimitConstraint As Profile
Dim RecoveredCost As Profile
Dim UnrecoveredCost As Profile
Dim UnrecoveredInterest As Profile
Dim RemainingUnrecoveredCost As Profile
Dim RemainingUnrecoveredInterest As Profile
Dim UnlimitedCost As Profile
Dim RecoveredUnlimitedCost As Profile
Dim UnrecoveredUnlimitedCost As Profile
Dim SumUnrecoveredUnlimitedCost As Float
Dim UnrecoveredUnlimitedInterest As Profile
Dim ProfitShareTrigger As Profile
Dim ProfitShareConstraint As Profile
Dim StateProfit As Profile
Dim ContractorProfit As Profile
Dim ContractorRevenue As Profile
Dim RValue As Profile
Dim SumContractorRevenue As Float
Dim SumContractorProfit As Float
Dim SumTotalCost As Float
Dim SumRecoveredCost As Float
___________________________________________________
Function CalculateDeductibleTaxes(Year As Integer)
Dim A As Integer, Y As Integer
___________________________________________________
Function CalculateDepreciation(Year As Integer)
Dim A As Integer, B As Integer, Y As Integer
___________________________________________________
Function CalculateProfitBasis (Year As Integer)
Dim A As Integer
Dim Available As Float
Dim UnrecoveredCostAndInterest As Float
Dim SumTax As Float
Dim TriggerShare As Float
Dim RecoveryLimitRate As Float
Set ProfitBasis(Year) = NetProjectRevenue(Year)
Call CalculateDepreciation(Year)
Call CalculateUplift(Year)
Call CalculateDeductibleTaxes(Year)
Set TotalCost(Year) = Depreciation(Year) + ExpensedCapex(Year) + ExpensedOpex(Year) +
Uplift(Year) + DeductibleTaxes(Year)
Call CalculateRecoveryLimitTrigger(Year)
Call CalculateRecoveryLimitConstraint(Year)
' Calculate Recovery Limit
Set RecoveryLimitBasis(Year) = NetProjectRevenue(Year)
If UnlimitedCost(Year) > RecoveryLimitBasis(Year) Then
Set RecoveredUnlimitedCost(Year) = RecoveryLimitBasis(Year)
Set UnrecoveredUnlimitedCost(Year) = UnlimitedCost(Year) - RecoveredUnlimitedCost(Year)
Set SumUnrecoveredUnlimitedCost = SumUnrecoveredUnlimitedCost +
UnrecoveredUnlimitedCost(Year)
Else
Set RecoveredUnlimitedCost(Year) = UnlimitedCost(Year)
End If
Set RecoveryLimitBasis(Year) = RecoveryLimitBasis(Year) - RecoveredUnlimitedCost(Year)
Set SumTax = RecoveryLimitBasis(Year) * 1.0 * RecoveryLimitConstraint(Year)
Set RecoveryLimit(Year) = RecoveryLimit(Year) + SumTax
' Calculate Recovered Cost
If TotalCost(Year) > RecoveryLimit(Year) Then
Set RecoveredCost(Year) = RecoveryLimit(Year)
Set UnrecoveredCost(Year) = TotalCost(Year) - RecoveryLimit(Year)
Set RemainingUnrecoveredCost(Year) = UnrecoveredCost(Year)
Else
Set RecoveredCost(Year) = TotalCost(Year)
End If
Set RecoveredCost(Year) = RecoveredCost(Year) + RecoveredUnlimitedCost(Year)
Set ProfitBasis(Year) = ProfitBasis(Year) - RecoveredCost(Year)
___________________________________________________
___________________________________________________
Function CalculateProfitShareTrigger (Year As Integer)
___________________________________________________
Function CalculateProfitSplit(Year As Integer)
Dim ProfitShareRate As Float
Dim SumTax As Float
Dim TriggerShare As Float
Dim PreviousTrigger As Float
Dim DeltaTrigger As Float
Call CalculateProfitShareTrigger(Year)
Call CalculateProfitShareConstraint(Year)
Set SumTax = ProfitBasis(Year) * 0.3 * ProfitShareConstraint(Year)
Set ContractorProfit(Year) = ContractorProfit(Year) + SumTax
Set StateProfit(Year) = ProfitBasis(Year) - ContractorProfit(Year)
Set ContractorRevenue(Year) = RecoveredCost(Year) + ContractorProfit(Year)
Set SumContractorRevenue = SumContractorRevenue + ContractorRevenue(Year)
Set SumContractorProfit = SumContractorProfit + ContractorProfit(Year)
Set SumRecoveredCost = SumRecoveredCost + RecoveredCost(Year)
Set SumTotalCost = SumTotalCost + TotalCost(Year)
If SumTotalCost > 0 Then
Set RValue(Year + 1) = (SumRecoveredCost + SumContractorProfit) / SumTotalCost
Else
Set RValue(Year + 1) = 0
End If
___________________________________________________
Function CalculateRecoveryLimitConstraint (Year As Integer)
Set RecoveryLimitConstraint(Year) = 1.0
___________________________________________________
Function CalculateRecoveryLimitTrigger (Year As Integer)
___________________________________________________
Function CalculateUplift(Year As Integer)
Dim A As Integer, Y As Integer
___________________________________________________
Function Calculate (Year As Integer)
Set GrossProjectRevenue(Year) = [Link](Year)
Set NetProjectRevenue(Year) = GrossProjectRevenue(Year)
Set SumPSCTaxes(Year) = 0.0
Call CalculateProfitBasis(Year)
Call CalculateProfitSplit(Year)