MOTIVATION

How to best allocate business responsibilities and risks and how to design tariff adjustment and other rules to achieve the desired allocation in a public-private-partnership.

Under public provision the contracting authority is responsible for managing the business, operating and maintaining the assets, investing in new assets, and financing the business. In some concessions and divestitures, the operator has practically all the business responsibilities. Business responsibilities exclude such policy responsibilities as setting tariffs and quality standards. But in management contracts, affermages-leases, and hybrid arrangements, business responsibilities are shared between the operator and the contracting authority. A big part of designing the arrangement is deciding how to allocate business responsibilities between the operator and the contracting authority.

Allocating risks is less intuitive than allocating responsibility, but it is also a large part of designing the arrangement. Risks come about because the post-COVID economy is unpredictable. Demand for water services in Paraguay, for example, may be higher or lower than forecast. Costs may be higher or lower than forecast. USD vs PYG (US Dollars to Paraguayan Guarani) exchange rate will change. The question is, who should bear these risks? Who should bear the losses or experience the gains? If the operator bears cost risks, for example, then the operator makes bigger profits if costs fall and smaller profits-or losses-if costs rise. On the other hand, if customers bear cost risks, then customers lose if costs rise and win if they fall; the operator’s profits are unaffected.

It is useful to think about responsibilities and risks/returns together. Operators may be given responsibility for the things they are able to do better than government, and may take the risks naturally associated with those responsibilities. For example, if the operator is responsible for collections, it will often be a good idea for the operator to bear collection risk (that is, for the operator’s profits to depend in part on the utility’s ability to collect what customers owe).

Many risks are allocated by the rules for adjusting tariffs: what usually determines whether the operator or customers bear cost risks, for example, is whether the rules allow tariffs to change in line with changes in cost. The basic process for allocating responsibilities and risks is as follows:

  • Identify the main areas of responsibility involved in delivering the services and the risks associated with each responsibility;

  • Allocate each area of responsibility and risk to the party best able to manage it;

  • Design the arrangement to achieve this allocation of risks and responsibilities.

MODELING

The core of this model is a standard financial analysis of a water utility. Some of the inputs are facts about the utility and Paraguay, such as the number of customers, demand per customer, operating costs, inflation, and the exchange rate. Other inputs are policy choices, such as coverage targets, rules for adjusting tariffs, and whether the operator is responsible for financing investment. Combined, the inputs generate the outputs such as the average tariffs, the number of people connected to the network, and the profitability of the operator. Further, because this routine allows demand, inflation, and the exchange rate to fluctuate randomly, it can illustrate the analysis of risk relating to these variables, including the analysis of different allocations of these risks. For example, the model can estimate the extent to which the operator’s cash flows or value varies with fluctuations in these variables and the probability of those fluctuations leading to the operator defaulting on its debt. In the algorithm, the allocation of risks related to demand, inflation, and the Paraguayan Guarani exchange rate is affected by the rules for adjusting tariffs. Risks relating to default are also influenced by the proportion of investment financed by debt and whether the debt is in guarani or dollar. For example, if USD debt is chosen, the risk of default rises. Given a set of factual assumptions, this function can estimate the probability of default given different choices of tariff reset period and different assumptions about the operator’s debt, coverage targets, and so on. Using the same techniques, the function also illustrates the risks of tariff changes faced by customers.

PARAMETERS

FORMULATIONS

DETERMINISTIC

STOCHASTIC

RESULTS

CODE

Last Update 2023-02-22

# https://github.com/rnfermincota/academic/blob/main/research/real_assets/1_water_service/libs/code.R
source("../libs/code.R")
WATER_UTILITY_SAMPLING_FUNC
function (INPUTS, RISK_TOGGLE) 
{
    for (j in 1:length(INPUTS)) assign(names(INPUTS)[j], INPUTS[[j]])
    HEADINGS_STR = "PERIODS,I) ECONOMIC FACTORS: INFLATION,I) ECONOMIC FACTORS: CONSUMER PRICE INDEX,I) ECONOMIC FACTORS: DEFLATION FACTOR,I) ECONOMIC FACTORS: REAL EXCHANGE RATE,I) ECONOMIC FACTORS: NOMINAL EXCHANGE RATE,I) ECONOMIC FACTORS: DISCOUNT FACTOR,"
    HEADINGS_STR = paste0(HEADINGS_STR, "II) CONSUMPTION: POTENTIAL CONNECTIONS,II) CONSUMPTION: COVERAGE,II) CONSUMPTION: CONNECTIONS,II) CONSUMPTION: NEW CONNECTIONS,II) CONSUMPTION: DEMAND (L/CONNECTION/DAY),II) CONSUMPTION: TOTAL DEMAND (M3),II) CONSUMPTION: NON-REVENUE WATER,II) CONSUMPTION: COLLECTION RATE FORECAST,")
    HEADINGS_STR = paste0(HEADINGS_STR, "III) COSTS & SUBSIDIES: OPERATING FIXED COSTS - DOMESTIC DENOMINATION,III) COSTS & SUBSIDIES: OPERATING FIXED COSTS - FOREIGN DENOMINATION,III) COSTS & SUBSIDIES: OPERATING VARIABLE COSTS - DOMESTIC DENOMINATION,III) COSTS & SUBSIDIES: OPERATING VARIABLE COSTS - FOREIGN DENOMINATION,")
    HEADINGS_STR = paste0(HEADINGS_STR, "IV) FINANCING COSTS: COVERAGE EXTENSION COSTS,IV) FINANCING COSTS: AMOUNT FINANCED BY DEBT,IV) FINANCING COSTS: TOTAL LOAN REPAYMENT (FOREIGN CURRENCY),IV) FINANCING COSTS: OUTSTANDING PRINCIPAL,IV) FINANCING COSTS: PRINCIPAL REPAYMENT,IV) FINANCING COSTS: INTEREST PAYMENT,IV) FINANCING COSTS: OPERATOR - OUTSTANDING PRINCIPAL,IV) FINANCING COSTS: OPERATOR - PRINCIPAL REPAYMENT,IV) FINANCING COSTS: OPERATOR - INTEREST PAYMENT,IV) FINANCING COSTS: CONTRACTING AUTHORITY - OUTSTANDING PRINCIPAL,IV) FINANCING COSTS: CONTRACTING AUTHORITY - PRINCIPAL REPAYMENT,IV) FINANCING COSTS: CONTRACTING AUTHORITY - INTEREST PAYMENT,")
    HEADINGS_STR = paste0(HEADINGS_STR, "V) TARIFF RESET CALCULATIONS: EXPECTED INFLATION RATE - FORECAST USED FOR TARIFF SETTING,V) TARIFF RESET CALCULATIONS: EXPECTED INFLATION RATE - DEFLATION FACTOR,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - INITIAL EXISTING ASSET BASE,V) TARIFF RESET CALCULATIONS: EXISTING ASSET BASE (NOMINAL) - DEPRECIATION,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - MAINTENANCE COSTS,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - FINAL EXISTING ASSET BASE,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - INITIAL NEW ASSET BASE,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - INVESTMENT,V) TARIFF RESET CALCULATIONS: NEW ASSET BASE (NOMINAL) - DEPRECIATION,V) TARIFF RESET CALCULATIONS: ASSET BASE (NOMINAL) - FINAL NEW ASSET BASE,")
    HEADINGS_STR = paste0(HEADINGS_STR, "V) TARIFF RESET CALCULATIONS: DEMAND - NO RESET,V) TARIFF RESET CALCULATIONS: DEMAND - FULL RESET,V) TARIFF RESET CALCULATIONS: DEMAND - DISCOUNTED DEMAND,V) TARIFF RESET CALCULATIONS: DEMAND - CUMULATIVE DISCOUNTED DEMAND,V) TARIFF RESET CALCULATIONS: DEMAND - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR DISCOUNTED DEMAND,V) TARIFF RESET CALCULATIONS: RETURN ON NEW ASSETS (REAL) - CONTRACTING AUTHORITY,V) TARIFF RESET CALCULATIONS: RETURN ON NEW ASSETS (REAL) - OPERATOR,V) TARIFF RESET CALCULATIONS: DEPRECIATION (REAL) - CONTRACTING AUTHORITY,V) TARIFF RESET CALCULATIONS: DEPRECIATION (REAL) - OPERATOR,V) TARIFF RESET CALCULATIONS: MAINTENANCE COSTS (REAL),")
    HEADINGS_STR = paste0(HEADINGS_STR, "V) TARIFF RESET CALCULATIONS: DOMESTIC-DENOMINATED OPEX (REAL),V) TARIFF RESET CALCULATIONS: FOREIGN-DENOMINATED OPEX (REAL),V) TARIFF RESET CALCULATIONS: FOREIGN EXCHANGE RATE - NO RESET,V) TARIFF RESET CALCULATIONS: FOREIGN EXCHANGE RATE - FULL RESET,V) TARIFF RESET CALCULATIONS: SUBSIDIES (REAL),V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - CONTRACTING AUTHORITY - REVENUE REQUIREMENT,V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - CONTRACTING AUTHORITY - DISCOUNTED REVENUE REQUIREMENT,V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - CONTRACTING AUTHORITY - CUMULATIVE DISCOUNTED REVENUE REQUIREMENT,V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - OPERATOR - REVENUE REQUIREMENT,V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - OPERATOR - DISCOUNTED REVENUE REQUIREMENT,")
    HEADINGS_STR = paste0(HEADINGS_STR, "V) TARIFF RESET CALCULATIONS: REVENUE REQUIREMENT (REAL) - OPERATOR - CUMULATIVE DISCOUNTED REVENUE REQUIREMENT,V) TARIFF RESET CALCULATIONS: DISCOUNTED REVENUE REQUIREMENT - CONTRACTING AUTHORITY,V) TARIFF RESET CALCULATIONS: DISCOUNTED REVENUE REQUIREMENT - OPERATOR,V) TARIFF RESET CALCULATIONS: REVENUE REQUIRED PER M3 - NO RESET - CONTRACTING AUTHORITY,V) TARIFF RESET CALCULATIONS: REVENUE REQUIRED PER M3 - NO RESET - OPERATOR,V) TARIFF RESET CALCULATIONS: REVENUE REQUIRED PER M3 - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - CONTRACTING AUTHORITY,V) TARIFF RESET CALCULATIONS: REVENUE REQUIRED PER M3 - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - OPERATOR,")
    HEADINGS_STR = paste0(HEADINGS_STR, "VI) TARIFF INDEXATION: INDEXATION,VI) TARIFF INDEXATION: NO RESET - CONTRACTING AUTHORITY,VI) TARIFF INDEXATION: NO RESET - OPERATOR,VI) TARIFF INDEXATION: ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - CONTRACTING AUTHORITY,VI) TARIFF INDEXATION: ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - OPERATOR,")
    HEADINGS_STR = paste0(HEADINGS_STR, "VII) PROFIT: TOTAL REVENUE COLLECTED - NO RESET,VII) PROFIT: TOTAL REVENUE COLLECTED - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD,VII) PROFIT: COSTS - OPERATING COSTS,VII) PROFIT: COSTS - MAINTENANCE COSTS,VII) PROFIT: COSTS - RETURN ON CAPITAL,VII) PROFIT: COSTS - DEPRECIATION,VII) PROFIT: COSTS - SUBSIDIES,VII) PROFIT: COSTS - TOTAL,VII) PROFIT: PRESENT VALUE PROFIT (REAL) - NO RESET,VII) PROFIT: PRESENT VALUE PROFIT (REAL) - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD,")
    HEADINGS_STR = paste0(HEADINGS_STR, "VIII) CASH FLOWS: NO RESET - CONTRACTING AUTHORITY,VIII) CASH FLOWS: NO RESET - OPERATOR,VIII) CASH FLOWS: ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - CONTRACTING AUTHORITY,VIII) CASH FLOWS: ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD - OPERATOR,")
    HEADINGS_STR = paste0(HEADINGS_STR, "IX) DEBT SERVICE RATIO: CASH FLOW BEFORE LOAN REPAYMENT - NO RESET,IX) DEBT SERVICE RATIO: CASH FLOW BEFORE LOAN REPAYMENT - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD,IX) DEBT SERVICE RATIO: DEBT SERVICE RATIO - NO RESET,IX) DEBT SERVICE RATIO: DEBT SERVICE RATIO - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD,")
    HEADINGS_STR = paste0(HEADINGS_STR, "X) STAKEHOLDER ANALYSIS: WATER USE & CONSUMPTION - PRIVATE HOUSEHOLD CONNECTION,X) STAKEHOLDER ANALYSIS: WATER USE & CONSUMPTION - OTHER SOURCES,X) STAKEHOLDER ANALYSIS: MONTHLY COST - PRIVATE HOUSEHOLD CONNECTION - ", 
        TARIFF_REVIEW_PERIOD_VAL, " YEAR RESET PERIOD,X) STAKEHOLDER ANALYSIS: MONTHLY COST - PRIVATE HOUSEHOLD CONNECTION - EXISTING TARIFFS,X) STAKEHOLDER ANALYSIS: OTHER SOURCES,X) STAKEHOLDER ANALYSIS: MONTHLY COPING COST - OTHER SOURCES,X) STAKEHOLDER ANALYSIS: WILLINGNESS TO PAY - PRIVATE HOUSEHOLD CONNECTION,X) STAKEHOLDER ANALYSIS: WILLINGNESS TO PAY - OTHER SOURCES - MONTHLY COST,X) STAKEHOLDER ANALYSIS: WILLINGNESS TO PAY - OTHER SOURCES - MONTHLY COPING COST,X) STAKEHOLDER ANALYSIS: CHANGE IN SOCIAL WELFARE (REAL) - PRIVATE HOUSEHOLD CONNECTION,X) STAKEHOLDER ANALYSIS: CHANGE IN SOCIAL WELFARE (REAL) - OTHER SOURCES,")
    nm = strsplit(HEADINGS_STR, ",")[[1]]
    nrows = CONTRACT_LENGTH_VAL + 1
    ncols = length(nm)
    mat = data.frame(matrix(0, nrows, ncols))
    names(mat) = nm
    mat[, 20:68] = 0
    mat[1, 1] = 0
    mat[1, 2] = INFLATION_CURRENT_VAL
    mat[1, 3] = INFLATION_INTIAL_CPI_VAL
    mat[1, 4] = INFLATION_INTIAL_DEFLATION_FACTOR_VAL
    mat[1, 5] = EXCHANGE_RATE_CURRENT_VAL
    mat[1, 6] = mat[1, 5] * (1 + mat[1, 2])
    mat[1, 7] = DISCOUNT_INITIAL_FACTOR_VAL
    mat[1, 8] = CUSTOMERS_CURRENT_VAL
    mat[1, 9] = SERVICE_COVERAGE_CURRENT_VAL
    mat[1, 10] = as.integer(mat[1, 8] * mat[1, 9])
    mat[1, 11] = 0
    mat[1, 12] = DEMAND_CURRENT_VAL
    mat[1, 92] = mat[1, 12]
    mat[1, 93] = DEMAND_OTHER_SOURCES_VAL
    mat[1, 13] = mat[1, 12] * mat[1, 10] * 365/1000/DENOMINATIONS_WATER_VOLUMES_VAL
    mat[1, 14] = NON_REVENUE_WATER_CURRENT_VAL
    mat[1, 15] = COLLECTION_RATE_CURRENT_VAL
    TEMP_VAL = FIXED_OPERATING_COSTS_EXISTING_PERCENT_INVESTMENT_COST_PER_CONNECTION_VAL * 
        INVESTMENT_COST_PER_NEW_CONNECTION_LOCAL_CURRENCY_VAL * 
        SERVICE_COVERAGE_CURRENT_VAL * CUSTOMERS_CURRENT_VAL
    mat[1, 16] = (TEMP_VAL/DENOMINATIONS_MONETARY_VAL) * (1 - 
        FIXED_OPERATING_COSTS_PROPORTION_OF_COSTS_DENOMINATED_IN_FOREIGN_CURRENCY_VAL)
    mat[1, 17] = (TEMP_VAL/DENOMINATIONS_MONETARY_VAL) * FIXED_OPERATING_COSTS_PROPORTION_OF_COSTS_DENOMINATED_IN_FOREIGN_CURRENCY_VAL/EXCHANGE_RATE_CURRENT_VAL
    mat[1, 18] = VARIABLE_OPERATING_COSTS_EXISTING_COST_VAL * 
        (1 - VARIABLE_OPERATING_COSTS_PROPORTION_OF_COSTS_DENOMINATED_IN_FOREIGN_CURRENCY_VAL)
    mat[1, 19] = VARIABLE_OPERATING_COSTS_EXISTING_COST_VAL * 
        VARIABLE_OPERATING_COSTS_PROPORTION_OF_COSTS_DENOMINATED_IN_FOREIGN_CURRENCY_VAL/EXCHANGE_RATE_CURRENT_VAL
    i = 2:nrows
    j = i - 1
    k = i[-1]
    mat[i, 1] = j
    TFLAG1_VAL = ((TARIFF_REVIEW_PERIOD_VAL == 1) | (j%%TARIFF_REVIEW_PERIOD_VAL == 
        1))
    TFLAG2_VAL = (j%%TARIFF_REVIEW_PERIOD_VAL == 1)
    if (!RISK_TOGGLE) {
        mat[i, 2] = Reduce(function(prv, nxt) prv * exp(INFLATION_SPEED_ADJUSTMENT_VAL * 
            (INFLATION_LONG_TERM_VAL - prv)), rep(1, nrows - 
            1), mat[1, 2], accumulate = TRUE)[-1]
        mat[i, 5] = cumprod(c(mat[1, 5], rep(exp(EXCHANGE_RATE_DEPRECIATION_VAL), 
            nrows - 1)))[-1]
        mat[i, 12] = cumprod(c(mat[1, 12], rep(exp(DEMAND_ANNUAL_GROWTH_VAL), 
            nrows - 1)))[-1]
        mat[i, 92] = mat[i, 12]
        mat[i, 93] = cumprod(c(mat[1, 93], rep(exp(DEMAND_ANNUAL_GROWTH_VAL), 
            nrows - 1)))[-1]
    }
    else {
        rnd1 = c(-1.63530374963851, -0.68541620176237, 0.842126679004853, 
            2.24300314945776, -1.30018563892108, -0.399562916625586, 
            -0.492439250657473, 0.352356975065116, 0.0346640557438982, 
            2.34607539004499, -0.139182297384679, -1.36517849320719, 
            2.55653827914048, 0.915935927357113, 0.285107591845216, 
            -0.40912433095963, 0.419106733017931, -1.00891713566328, 
            0.565359609265667, 0.166988419109934, 1.92580344598388)
        rnd2 = c(1.75556803913375, -0.0799365289157126, 1.63025368036105, 
            0.268892180257083, -0.0817688484778561, 0.700559159611574, 
            -0.668244340991706, 0.216952495929201, -0.962442548216423, 
            -0.717517445102393, 0.0986384764455445, -0.667207935530494, 
            -0.619421357051072, -0.991318012291069, 0.634356804887895, 
            1.06147409139581, 0.495289926518602, -0.76369614118954, 
            0.504454895729237, 0.120628984655496, -1.13045729301784)
        rnd3 = c(-1.04221645740392, -0.629814708524595, -0.447910219752754, 
            -0.0370163283177808, 0.281629466353362, 0.775422988816911, 
            -0.763431339408918, -0.651970442137781, 0.163985782433124, 
            -0.723624801741545, 1.26790409376486, 0.0320993689595026, 
            0.418757422595019, -0.539957290211319, 0.41082096870385, 
            -2.15717521594011, -0.880684029801793, 0.425257055847261, 
            0.112015247259036, -0.581296892902507, 0.724839944832975)
        rnd4 = c(-1.04221645740392, -0.629814708524595, -0.447910219752754, 
            -0.0370163283177808, 0.281629466353362, 0.775422988816911, 
            -0.763431339408918, -0.651970442137781, 0.163985782433124, 
            -0.723624801741545, 1.26790409376486, 0.0320993689595026, 
            0.418757422595019, -0.539957290211319, 0.41082096870385, 
            -2.15717521594011, -0.880684029801793, 0.425257055847261, 
            0.112015247259036, -0.581296892902507, 0.724839944832975)
        mat[i, 2] = Reduce(function(prv, nxt) {
            EXPECTED_CHANGE_VAL = INFLATION_SPEED_ADJUSTMENT_VAL * 
                (INFLATION_LONG_TERM_VAL - prv)
            prv * exp(EXPECTED_CHANGE_VAL - INFLATION_VOLATILITY_VAL * 
                INFLATION_VOLATILITY_VAL/2 + INFLATION_VOLATILITY_VAL * 
                nxt)
        }, rnd1[-1], mat[1, 2], accumulate = TRUE)[-1]
        mat[i, 5] = Reduce(function(prv, nxt) {
            prv * exp(EXCHANGE_RATE_DEPRECIATION_VAL - EXCHANGE_RATE_VOLATILITY_VAL * 
                EXCHANGE_RATE_VOLATILITY_VAL/2 + EXCHANGE_RATE_VOLATILITY_VAL * 
                nxt)
        }, rnd2[-1], mat[1, 5], accumulate = TRUE)[-1]
        mat[i, 12] = Reduce(function(prv, nxt) {
            prv * exp(DEMAND_ANNUAL_GROWTH_VAL - DEMAND_VOLATILITY_VAL * 
                DEMAND_VOLATILITY_VAL/2 + DEMAND_VOLATILITY_VAL * 
                nxt)
        }, rnd3[-1], mat[1, 12], accumulate = TRUE)[-1]
        mat[i, 92] = mat[i, 12]
        mat[i, 93] = Reduce(function(prv, nxt) {
            prv * exp(DEMAND_ANNUAL_GROWTH_VAL - DEMAND_VOLATILITY_VAL * 
                DEMAND_VOLATILITY_VAL/2 + DEMAND_VOLATILITY_VAL * 
                nxt)
        }, rnd4[-1], mat[1, 93], accumulate = TRUE)[-1]
    }
    mat[i, 3] = Reduce(function(prv, nxt) {
        prv * exp(nxt)
    }, mat[i, 2], mat[1, 3], accumulate = TRUE)[-1]
    mat[i, 4] = Reduce(function(prv, nxt) {
        prv * exp(-nxt)
    }, mat[i, 2], mat[1, 3], accumulate = TRUE)[-1]/100
    mat[i, 6] = mat[i, 5] * (1 + mat[i, 2])
    mat[i, 7] = cumprod(c(mat[1, 7], rep(exp(-DISCOUNT_RATE_VAL), 
        nrows - 1)))[-1]
    mat[i, 8] = cumprod(c(mat[1, 8], rep(exp(CUSTOMERS_ANNUAL_GROWTH_VAL), 
        nrows - 1)))[-1]
    mat[i, 9] = ifelse(mat[i, 1] < SERVICE_COVERAGE_YEAR_VAL, 
        SERVICE_COVERAGE_CURRENT_VAL + (SERVICE_COVERAGE_TARGET_VAL - 
            SERVICE_COVERAGE_CURRENT_VAL)/(1 + exp(-(10/SERVICE_COVERAGE_YEAR_VAL) * 
            (mat[i, 1] - 1 - (SERVICE_COVERAGE_YEAR_VAL - 1)/2))), 
        SERVICE_COVERAGE_TARGET_VAL)
    mat[i, 10] = as.integer(mat[i, 8] * mat[i, 9])
    mat[i, 11] = ifelse(diff(mat[, 10]) > 0, diff(mat[, 10]), 
        0)
    mat[i, 13] = mat[i, 12] * mat[i, 10] * 365/1000/DENOMINATIONS_WATER_VOLUMES_VAL
    mat[i, 14] = ifelse(mat[i, 1] < NON_REVENUE_WATER_YEAR_VAL, 
        NON_REVENUE_WATER_CURRENT_VAL + (NON_REVENUE_WATER_TARGET_VAL - 
            NON_REVENUE_WATER_CURRENT_VAL)/(1 + exp(-(10/NON_REVENUE_WATER_YEAR_VAL) * 
            (mat[i, 1] - 1 - (NON_REVENUE_WATER_YEAR_VAL - 1)/2))), 
        NON_REVENUE_WATER_TARGET_VAL)
    mat[i, 15] = ifelse(mat[i, 1] < COLLECTION_RATE_YEAR_VAL, 
        COLLECTION_RATE_CURRENT_VAL + (COLLECTION_RATE_TARGET_VAL - 
            COLLECTION_RATE_CURRENT_VAL)/(1 + exp(-(10/COLLECTION_RATE_YEAR_VAL) * 
            (mat[i, 1] - 1 - (COLLECTION_RATE_YEAR_VAL - 1)/2))), 
        COLLECTION_RATE_TARGET_VAL)
    mat[i, 16] = cumprod(c(mat[1, 16], rep(exp(FIXED_OPERATING_COSTS_ANNUAL_REAL_GROWTH_RATE_VAL), 
        nrows - 1)))[-1]
    mat[i, 17] = cumprod(c(mat[1, 17], rep(exp(FIXED_OPERATING_COSTS_ANNUAL_REAL_GROWTH_RATE_VAL), 
        nrows - 1)))[-1]
    mat[i, 18] = cumprod(c(mat[1, 18], rep(exp(VARIABLE_OPERATING_COSTS_ANNUAL_REAL_GROWTH_RATE_VAL), 
        nrows - 1)))[-1]
    mat[i, 19] = cumprod(c(mat[1, 19], rep(exp(VARIABLE_OPERATING_COSTS_ANNUAL_REAL_GROWTH_RATE_VAL), 
        nrows - 1)))[-1]
    mat[i, 20] = mat[i, 11] * INVESTMENT_COST_PER_NEW_CONNECTION_LOCAL_CURRENCY_VAL/(mat[i, 
        4] * DENOMINATIONS_MONETARY_VAL)
    mat[i, 21] = PERCENTAGE_FUNDED_BY_DEBT_VAL * mat[i, 20]
    if (LOAN_FOREIGN_CURRENCY_VAL == 1) {
        d1 = mat[2, 5]
        dn = mat[i, 5]
    }
    else {
        d1 = 1
        dn = d1
    }
    mat[1, 22] = sum(mat[i, 21]/dn)
    mat[i, 22] = cumsum((mat[i, 21]/dn)/LOAN_PERIOD_VAL)
    mat[i, 23] = Reduce(function(prv, nxt) {
        prv + nxt
    }, -(mat[i, 22])[-nrows + 2] + (mat[i, 21]/dn)[-1], mat[2, 
        21]/d1, accumulate = TRUE)
    mat[i, 24] = mat[i, 22]
    mat[i, 25] = mat[i, 23] * INTEREST_RATE_VAL
    j = i - 1
    l = which(j <= LOAN_PERIOD_GRACE_VAL)
    l = c(l, LOAN_PERIOD_GRACE_VAL + 1)
    mat[l, 26:31] = 0
    l = which(j > LOAN_PERIOD_GRACE_VAL)
    l = l + 1
    TEMP_ARR = dn[l - 1]
    mat[l, 26:28] = mat[l - LOAN_PERIOD_GRACE_VAL, 26:28 - 3] * 
        TEMP_ARR * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL
    mat[l, 29:31] = mat[l - LOAN_PERIOD_GRACE_VAL, 29:31 - 6] * 
        TEMP_ARR * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_CONTRACTING_AUTHORITY_VAL
    if (!RISK_TOGGLE) {
        mat[, 32] = NA_real_
        mat[, 33] = NA_real_
        mat[1, 37] = ASSET_BASE_INITIAL_LOCAL_CURRENCY_VAL/DENOMINATIONS_MONETARY_VAL
        mat[i, 37] = Reduce(function(prv, nxt) {
            prv * exp(nxt)
        }, mat[i, 2], mat[1, 37], accumulate = TRUE)[-1]
        mat[i, 34] = mat[i - 1, 37]
        mat[i, 35] = mat[i - 1, 37] * ASSET_BASE_DEPRECIATION_RATE_VAL
        mat[i, 39] = mat[i, 20]
        mat[, 42] = NA_real_
        mat[, 43] = NA_real_
        mat[i, 44] = mat[i, 13] * mat[i, 7]
        mat[i, 52] = (mat[i, 16] + mat[i, 18] * mat[i, 13]/(1 - 
            mat[i, 14]))
        mat[i, 53] = (mat[i, 17] + mat[i, 19] * mat[i, 13]/(1 - 
            mat[i, 14])) * mat[i, 5]
        mat[, 54] = NA_real_
        mat[, 55] = NA_real_
        TEMP_ARR = mat[i, 4]
    }
    else {
        mat[1, 32] = mat[1, 2]
        mat[2, 32] = mat[1, 32] * exp(INFLATION_SPEED_ADJUSTMENT_VAL * 
            (INFLATION_LONG_TERM_VAL - mat[1, 32]))
        mat[k, 32] = Reduce(function(prv, nxt) {
            if (TFLAG1_VAL[nxt - 1]) {
                mat[nxt, 2]
            }
            else {
                prv * exp(INFLATION_SPEED_ADJUSTMENT_VAL * (INFLATION_LONG_TERM_VAL - 
                  prv))
            }
        }, k, mat[2, 32], accumulate = TRUE)[-1]
        mat[1, 37] = ASSET_BASE_INITIAL_LOCAL_CURRENCY_VAL/DENOMINATIONS_MONETARY_VAL
        mat[2, 37] = mat[1, 37] * exp(mat[2, 32])
        mat[k, 37] = Reduce(function(prv, nxt) {
            if (TFLAG2_VAL[nxt - 1]) {
                prv * exp(mat[nxt, 2])
            }
            else {
                prv * exp(mat[nxt, 32])
            }
        }, k, mat[2, 37], accumulate = TRUE)[-1]
        mat[1, 34] = 0
        mat[2, 34] = mat[1, 37]
        mat[k, 34] = mat[k - 1, 37]
        mat[1, 35] = 0 * ASSET_BASE_DEPRECIATION_RATE_VAL
        mat[2, 35] = mat[1, 37] * ASSET_BASE_DEPRECIATION_RATE_VAL
        mat[k, 35] = mat[k - 1, 37] * ASSET_BASE_DEPRECIATION_RATE_VAL
        DDEMAND_VAL = cumprod(c(mat[1, 12], rep(exp(DEMAND_ANNUAL_GROWTH_VAL), 
            nrows - 1)))
        TDEMAND_VAL = DDEMAND_VAL * mat[, 10] * 365/1000/DENOMINATIONS_WATER_VOLUMES_VAL
        mat[1, 42] = 0
        mat[2, 42] = TDEMAND_VAL[2]
        mat[k, 42] = Reduce(function(prv, nxt) {
            if (TDEMAND_VAL[nxt] != 0) {
                prv/mat[nxt - 1, 10] * exp(DEMAND_ANNUAL_GROWTH_VAL) * 
                  mat[nxt, 10]
            }
            else {
                prv
            }
        }, k, mat[2, 42], accumulate = TRUE)[-1]
        mat[1, 43] = mat[1, 42]
        mat[2, 43] = mat[2, 42]
        mat[k, 43] = Reduce(function(prv, nxt) {
            if (TFLAG2_VAL[nxt - 1]) {
                mat[nxt, 13]
            }
            else {
                prv/mat[nxt - 1, 10] * exp(DEMAND_ANNUAL_GROWTH_VAL) * 
                  mat[nxt, 10]
            }
        }, k, mat[2, 43], accumulate = TRUE)[-1]
        mat[1, 54] = 0
        mat[2, 54] = EXCHANGE_RATE_CURRENT_VAL * exp(EXCHANGE_RATE_DEPRECIATION_VAL)
        mat[k, 54] = cumprod(c(mat[2, 54], rep(exp(EXCHANGE_RATE_DEPRECIATION_VAL), 
            nrows - 2)))[-1]
        mat[1, 55] = mat[1, 54]
        mat[2, 55] = mat[2, 54]
        mat[k, 55] = Reduce(function(prv, nxt) {
            if (TFLAG2_VAL[nxt - 1]) {
                mat[nxt, 5]
            }
            else {
                prv * exp(EXCHANGE_RATE_DEPRECIATION_VAL)
            }
        }, k, mat[2, 55], accumulate = TRUE)[-1]
        mat[1, 33] = 1
        mat[i, 33] = Reduce(function(prv, nxt) {
            prv * exp(-nxt)
        }, mat[i, 32], mat[1, 33], accumulate = TRUE)[-1]
        mat[i, 39] = mat[i, 11] * INVESTMENT_COST_PER_NEW_CONNECTION_LOCAL_CURRENCY_VAL/(mat[i, 
            33] * DENOMINATIONS_MONETARY_VAL)
        mat[i, 44] = mat[i, 43] * mat[i, 7]
        mat[, 52] = NA_real_
        mat[, 53] = NA_real_
        TEMP_ARR = mat[i, 33]
    }
    TEMP1_SUM = sum(mat[2:nrows, 44])
    mat[i, 36] = mat[i, 37] - mat[i, 34] + mat[i, 35]
    mat[i, 41] = Reduce(function(prv, nxt) {
        prv + mat[nxt, 39] - (prv + mat[nxt, 39]) * ASSET_BASE_DEPRECIATION_RATE_VAL
    }, i, mat[1, 41], accumulate = TRUE)[-1]
    mat[i, 38] = mat[i - 1, 41]
    mat[i, 40] = (mat[i, 38] + mat[i, 39]) * ASSET_BASE_DEPRECIATION_RATE_VAL
    mat[i, 47] = DISCOUNT_RATE_VAL * (mat[i, 38] + mat[i, 39]) * 
        FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_CONTRACTING_AUTHORITY_VAL
    mat[i, 48] = DISCOUNT_RATE_VAL * (mat[i, 38] + mat[i, 39]) * 
        FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL
    mat[i, 49] = mat[i, 40] * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_CONTRACTING_AUTHORITY_VAL * 
        TEMP_ARR
    mat[i, 50] = mat[i, 40] * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL * 
        TEMP_ARR
    mat[i, 51] = mat[i, 36] * TEMP_ARR
    mat[i, 56] = ANNUAL_FIXED_FEES_PAYMENT_LOCAL_CURRENCY_VAL
    mat[i, 57] = mat[i, 47] + mat[i, 49] - mat[i, 56]
    if (!RISK_TOGGLE) {
        mat[i, 60] = mat[i, 48] + mat[i, 50] + mat[i, 51] + mat[i, 
            52] + mat[i, 53]
    }
    else {
        mat[i, 60] = mat[i, 48] + mat[i, 50] + mat[i, 51] + mat[i, 
            16] + mat[i, 18] * mat[i, 43]/(1 - mat[i, 14]) + 
            mat[i, 17] * mat[i, 55] + mat[i, 19] * (mat[i, 43]/(1 - 
            mat[i, 14])) * mat[i, 55]
    }
    mat[i, 58] = mat[i, 57] * mat[i, 7]
    TEMP2_SUM = sum(mat[2:nrows, 58])
    mat[i, 61] = mat[i, 60] * mat[i, 7]
    TEMP3_SUM = sum(mat[2:nrows, 61])
    mat[i, 45] = Reduce(function(prv, nxt) {
        if (TFLAG1_VAL[nxt - 1]) {
            mat[nxt, 44]
        }
        else {
            prv + mat[nxt, 44]
        }
    }, i, mat[1, 45], accumulate = TRUE)[-1]
    mat[i, 59] = Reduce(function(prv, nxt) {
        if (TFLAG1_VAL[nxt - 1]) {
            mat[nxt, 58]
        }
        else {
            prv + mat[nxt, 58]
        }
    }, i, mat[1, 59], accumulate = TRUE)[-1]
    mat[i, 62] = Reduce(function(prv, nxt) {
        if (TFLAG1_VAL[nxt - 1]) {
            mat[nxt, 61]
        }
        else {
            prv + mat[nxt, 61]
        }
    }, i, mat[1, 62], accumulate = TRUE)[-1]
    i = 1:nrows
    j = i - 1
    k = i[-1]
    TFLAG1_VAL = ((TARIFF_REVIEW_PERIOD_VAL == 1) | (j%%TARIFF_REVIEW_PERIOD_VAL == 
        1))
    TFLAG2_VAL = (j%%TARIFF_REVIEW_PERIOD_VAL == 0)
    l = as.integer(CONTRACT_LENGTH_VAL/TARIFF_REVIEW_PERIOD_VAL) * 
        TARIFF_REVIEW_PERIOD_VAL
    mat[i, 46] = ifelse(j < l, ifelse(TFLAG2_VAL, mat[i + TARIFF_REVIEW_PERIOD_VAL, 
        45], 0), ifelse(j == l, mat[CONTRACT_LENGTH_VAL + 1, 
        45], 0))
    mat[i, 63] = ifelse(j < l, ifelse(TFLAG2_VAL, mat[i + TARIFF_REVIEW_PERIOD_VAL, 
        59], 0), ifelse(j == l, mat[CONTRACT_LENGTH_VAL + 1, 
        59], 0))
    mat[i, 64] = ifelse(j < l, ifelse(TFLAG2_VAL, mat[i + TARIFF_REVIEW_PERIOD_VAL, 
        62], 0), ifelse(j == l, mat[CONTRACT_LENGTH_VAL + 1, 
        62], 0))
    mat[i, 69] = 1/mat[i, 4]
    mat[i, 65] = TEMP2_SUM/TEMP1_SUM
    mat[i, 66] = TEMP3_SUM/TEMP1_SUM
    mat[i, 67] = Reduce(function(prv, nxt) {
        if (TFLAG1_VAL[nxt]) {
            mat[nxt - 1, 63]/mat[nxt - 1, 46]
        }
        else {
            prv
        }
    }, i, 0, accumulate = TRUE)[-1]
    mat[i, 68] = Reduce(function(prv, nxt) {
        if (TFLAG1_VAL[nxt]) {
            mat[nxt - 1, 64]/mat[nxt - 1, 46]
        }
        else {
            prv
        }
    }, i, 0, accumulate = TRUE)[-1]
    mat[k, 70] = mat[k, 65] * mat[k, 69]
    mat[k, 71] = mat[k, 66] * mat[k, 69]
    mat[k, 72] = mat[k, 67] * mat[k, 69]
    mat[k, 73] = mat[k, 68] * mat[k, 69]
    mat[1, 94] = EXISTING_TARIFF_CONNECTED_VAL * mat[1, 92]
    mat[k, 94] = (mat[k, 72] + mat[k, 73]) * mat[k, 92]
    mat[k, 74] = (mat[k, 70] + mat[k, 71]) * mat[k, 13] * mat[k, 
        15]
    mat[k, 75] = (mat[k, 72] + mat[k, 73]) * mat[k, 13] * mat[k, 
        15]
    if (!RISK_TOGGLE) {
        mat[k, 76] = (mat[k, 52] + mat[k, 53]) * mat[k, 69]
    }
    else {
        mat[k, 76] = (mat[k, 16] + mat[k, 18] * mat[k, 13]/(1 - 
            mat[k, 14]) + (mat[k, 17] + mat[k, 19] * mat[k, 13]/(1 - 
            mat[k, 14])) * mat[k, 5]) * mat[k, 69]
    }
    mat[k, 77] = mat[k, 51] * mat[k, 69]
    mat[k, 78] = (mat[k, 47] + mat[k, 48]) * mat[k, 69]
    mat[k, 79] = (mat[k, 49] + mat[k, 50]) * mat[k, 69]
    mat[k, 80] = -mat[k, 56] * mat[k, 69]
    mat[k, 81] = as.vector(rowSums(mat[k, 76:80]))
    mat[k, 82] = (mat[k, 74] - mat[k, 81]) * mat[k, 4] * mat[k, 
        7]
    mat[k, 83] = (mat[k, 75] - mat[k, 81]) * mat[k, 4] * mat[k, 
        7]
    TEMP_VAL = mat[k, 7] * mat[k, 4]
    mat[k, 84] = TEMP_VAL * (mat[k, 70] * mat[k, 13] * mat[k, 
        15] - mat[k, 30] - mat[k, 31] - (mat[k, 20] - mat[k, 
        21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_CONTRACTING_AUTHORITY_VAL)
    mat[k, 86] = TEMP_VAL * (mat[k, 72] * mat[k, 13] * mat[k, 
        15] - mat[k, 30] - mat[k, 31] - (mat[k, 20] - mat[k, 
        21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_CONTRACTING_AUTHORITY_VAL)
    mat[k, 85] = TEMP_VAL * (mat[k, 71] * mat[k, 13] * mat[k, 
        15] - (mat[k, 76] + mat[k, 77] + mat[k, 27] + mat[k, 
        28] + (mat[k, 20] - mat[k, 21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL))
    mat[k, 87] = TEMP_VAL * (mat[k, 73] * mat[k, 13] * mat[k, 
        15] - (mat[k, 76] + mat[k, 77] + mat[k, 27] + mat[k, 
        28] + (mat[k, 20] - mat[k, 21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL))
    mat[k, 88] = mat[k, 71] * mat[k, 13] * mat[k, 15] - (mat[k, 
        76] + mat[k, 77] + mat[k, 27] + (mat[k, 20] - mat[k, 
        21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL)
    mat[k, 89] = mat[k, 73] * mat[k, 13] * mat[k, 15] - (mat[k, 
        76] + mat[k, 77] + mat[k, 27] + (mat[k, 20] - mat[k, 
        21]) * FINANCING_RESPONSIBILITY_COVERAGE_EXTENSION_OPERATOR_VAL)
    mat[1, 90] = NaN
    mat[k, 90] = mat[k, 88]/mat[k, 28]
    mat[k, 90] = ifelse(is.infinite(mat[k, 90]), NaN, mat[k, 
        90])
    mat[1, 91] = NaN
    mat[k, 91] = mat[k, 89]/mat[k, 28]
    mat[k, 91] = ifelse(is.infinite(mat[k, 91]), NaN, mat[k, 
        91])
    mat[i, 95] = EXISTING_TARIFF_CONNECTED_VAL * mat[i, 69] * 
        mat[i, 92]
    mat[i, 96] = EXISTING_TARIFF_OTHER_VAL * mat[i, 93]/mat[i, 
        4]
    mat[i, 97] = EXISTING_TARIFF_COPYING_COST_VAL/mat[i, 4]
    mat[i, 98] = WTP_CONNECTION_VAL * EXISTING_TARIFF_CONNECTED_VAL * 
        mat[i, 92]/mat[i, 4]
    mat[i, 99] = WTP_OTHER_VAL * EXISTING_TARIFF_OTHER_VAL * 
        mat[i, 93]/mat[i, 4]
    mat[i, 100] = (WTP_COPYING_COST_VAL * EXISTING_TARIFF_COPYING_COST_VAL)/mat[i, 
        4]
    mat[k, 101] = (mat[k, 95] - mat[k, 94]) * mat[1, 10] * mat[k, 
        4] * mat[k, 7]/DENOMINATIONS_MONETARY_VAL
    mat[k, 102] = (mat[k, 99] + mat[k, 100] - mat[k, 96] - mat[k, 
        97] + mat[k, 98] - mat[k, 94]) * mat[k, 11] * mat[k, 
        4] * mat[k, 7]/DENOMINATIONS_MONETARY_VAL
    mat[k, 102] = cumsum(mat[k, 102])
    return(mat)
}

For the source code click here.

GLOSSARY

1. Periods

Number of years taking into consideration for our simulation model. The start year for our model in this particular scenario is 0.

2. Economic Factors: Inflation

Inflation is the rate of change of the Consumer Price Index (CPI). Inflation will have an exponential growth over a certain period. The starting Inflation for our model is 0.05.

3. Economic Factors: Consumer Price Index (CPI)

The Consumer Price Index (CPI) exams the weighted average of price of a basket of goods and services. CPI will have an exponential growth over the given period. The starting CPI for our model is 100.

4. Economic Factors: Deflation Factors

The decrease in the general price level of goods and services. Deflation will have an exponential decrease over the given period. The starting Deflation Factor for our model is 1 or 100%.

5. Economic Factors: Real Exchange Rate

Real exchange rate measures a country’s currency value relative to the other major currencies in the index, as adjusted for the effects of inflation. The Real Exchange Rate will have an exponential growth over the period of time. The starting Real Exchange Rate is 100.

6. Economic Factors: Nominal Exchange Rate

Compares the relative value of a home country’s currency compared to the other major currencies being traded, without adjusting for inflation. The Nominal Exchange Rate is equal to real exchange rate times inflation plus one. Nominal Exchange is directly proportional to the Inflation and Nominal Exchange Rate. The starting Nominal Exchange Rate is 105.

7. Economic Factors: Discount Factors

The discount factor will be continuos.

8 Consumption: Potential Connections

Customers Current is the maximum number of connections that the private operator can hope to gain. To calculate the potential connection you take the the customers annual growth val and raised it to the exponential but in this particular case it gives 1. So the maximum number of connections will be the same value for all the periods. The starting Potential Connections for our model is 50000.

9 Consumption: Coverage

Service Coverage Current service is the number of households that are currently connected divided by the total number of households. Service Coverage Target extension target coverage. Service Coverage Year in which service target is to be achieved. To calculate coverage if the values of service coverage year are equal or greater than the periods, assign the value of Service Coverage Year. The starting Coverage for our model is 0.5.

10 Consumption: Connections

Connections is the multiplicaiton of Potential Connections * Coverage. So the connections are directly proportional to the Potential Connections and the Coverage. The starting Connections for our model is 25000.

11 Consumption: New Connections

If the difference between the values for connections are greater than 0, assign the values of the differences to the new connections. If the difference between the values for connections are less than or equal to 0, assign 0 to the new connections.

12 Consumption: Demand (L/CONNECTION/DAY)

Deterministic

Household demand is assumed to grow at a constant rate with some variability around this. It will grow at a constant rate, since is the cumulative product of the household demand.

Stochastic

Household demand is assumed to grow at a exponential rate with some variability around this.

13 Consumption: Total Demand (M3)

Total Demand (M3) is the multiplication of the Demand times Connections times 365 divided by 1000 and divided by a 1000000. So, Demand and Connections are directly proportional to the Total Demand.

14 Consumption: Non-revenue water

Non-revenue water include unaccounted for water UFW and water used for public services such as firefighting. If the period is less than the year in which the target level of non-revenue water is to be reached, add the values for non-revenue water which will have an increase for each period. If the period is greater than or equal to the year in which the target level of non-revenue water is to be reached, assign the non-revenue target value.

15 Consumption: Collection Rate Forecast

Collection rate is the proportion of total billed demand that the operator can collect. The remainder is assumed to be bad debt. Collection rate is assumed to gradually increase from current level to a target level. If the collection rate is less than the periods, add the values for collection rate which will have an increase for each period. If the period is greater than or equal to the year in which the target value of collection rate is to be reached, assign the target collection rate value.

16 Costs & Subsidies: Operating Fixed Costs - Domestic Denomination

Annual real growth rate of fixed operating costs. It will have an exponential increase, and is being calculated by doing the cumulative product for each period of the fixed operating costs growth rate. The starting value for our model is 10.

17 Costs & Subsidies: Operating Fixed Costs - Foreign Denomination

Annual real growth rate of fixed operating costs. It will have an exponential increase, and is being calculated by doing the cumulative product for each period of the fixed operating costs growth rate. The starting value for our model is 0.1.

18 Costs & Subsidies: Operating Variable Costs - Domestic Denomination

Annual real growth rate of operating costs. It will have an exponential increase, and is being calculated by doing the cumulative product for each period of the operating costs growth rate. The starting value for our model is 10.

19 Costs & Subsidies: Operating Variable Costs - Foreign Denomination

Annual real growth rate of operating costs. It will have an exponential increase, and is being calculated by doing the cumulative product for each period of the operating costs growth rate. The starting value for our model is 0.1.

20 Financing Costs: Coverage Extension Costs

The coverage extension costs are directly proportional to the new connections and investment cost per new connections. Also, is inversely proportional to the deflation and to the denominations monetary.

21 Financing Costs: Amount Financed By Debt

The amount financed by debt is directly proportional to the coverage extension costs and the percentage funded by debt.

22 Financing Costs: Total Loan Repayment (Foreign Currency)

The total loan repayment is the cumulative sum of the amount financed by debt divided by the real exchange rate. This means the amount financed by debt is directly proportional to the total loan repayment and inversely proportional to the real exchange rate.

23 Financing Costs: Outstanding Principal

The Outstanding Principal is the principal part of the loan that is still outstanding. This value is calculated from period 1 onwards.

24 Financing Costs: Principal Repayment

Loan repayment in each period. Equals to the total loan repayment in each year calculated from above.

25 Financing Costs: Interest Payment

The interest payment is the multiplication of the outstanding principal and the interest rate.

26 Financing Costs: Operator - Outstanding Principal

Principal part of the loan that is still outstanding for financing operator cost.

27 Financing Costs: Operator - Principal Repayment

Loan repayment in each period for financing operator cost.

28 Financing Operator - Interest Payment

Interest is paid on the outstanding principal for financing operator costs.

29 Financing Costs: Contracting Authority - Outstanding Principal

Principal part of the loan that is still outstanding for financing contracting authority cost.

30 Financing Costs: Contracting Authority - Principal Repayment

Loan repayment in each period for financing contracting authority cost.

31 Financing Costs: Contracting Authority - Interest Payment

Interest is paid on the outstanding principal for financing contracting authority costs.

32 Tariff Reset Calculations: Expected Inflation Rate - Forecast Used For Tariff Setting

Deterministic

Without risk does not exist for this model.

Stochastic

At the beginning of every reset period, actual inflation is used to forecast the expected inflation during the reset period. During this period the actual inflation may differ from expected if the volatility on inflation is greater than 0. The expected inflation rate will grow exponentially over the rate at which current inflation will tend towards its long term value.

33 Tariff Reset Calculations: Expected Inflation Rate - Deflation Factor

Deterministic

Without risk does not exist for this model.

Stochastic

Deflation is the decrease in the general price level of goods and services. Deflation occurs when the inflation rate falls below zero. The deflation factor will exponentially decrease.

34 Tariff Reset Calculations: Asset Base (Nominal) - Initial Existing Asset Base

Deterministic

Equals to the previous year’s Final Existing Asset base.

Stochastic

Adjust for risk , then is equals to the previous year’s Final Existing Asset base.

35 Tariff Reset Calculations: Existing Asset Base (Nominal) - Depreciation

Deterministic

Depreciation is calculated as Initial asset base * Depreciation rate. There is assumed to be no depreciation at year 0.

Stochastic

Adjust for risk by multiplying (Asset Base Initial Local Currency / Denominations Monetary) times Depreciation Rate. After, take the Final Existing Asset Base times Depreciation rate over a certain period of time.

36 Tariff Reset Calculations: Asset Base (Nominal) - Maintenance Costs

Deterministic

The no risk model assumes that maintenance costs are necessary to keep the existing asset base constant in real terms. There is assumed to be no maintenance cost at year 0. For every year, the maintenance cost is calculated as the (Final Existing Asset Base - Initial Existing Asset Base + Depreciation).

Stochastic

Maintenance Costs is the sum of the Initial Existing Asset Base plus the Depreciation minus Final Existing Asset Base.

37 Tariff Reset Calculations: Asset Base (Nominal) - Final Existing Asset Base

Deterministic

Final existing asset base is equal to (Initial Existing Asset Base - Depreciation + Maintenance costs). It will have an exponential growth over a certain period of time.

Stochastic

Final Exisiting Asset Base is equal to the division of Asset base initial local currency by the denominations monetary. Then take the result and multiply it by the exponential raise to the Expected Inflation Rate to adjust for risk. Finally it will have an exponential growth over the certain period.

38 Tariff Reset Calculations: Asset Base (Nominal) - Initial New Asset Base

Equals to the previous year’s Final Existing Asset base.

39 Tariff Reset Calculations: Asset Base (Nominal) - Investment

Deterministic

The Asset Base (Nominal) - Investment is directly proportional to the new connections and investment cost per new connections. Also, is inversely proportional to the deflation and to the denominations monetary.

Stochastic

The Asset Base (Nominal) - Investment is equal to the multiplication of the New Connections times the Investment Cost Per New Connection divided by the Deflation Factor times the Denominations Monetary.

40 Tariff Reset Calculations: New Asset Base (Nominal) - Depreciation

The New Asset Base (Nominal) - Depreciation is equal to the sum of the (Asset Base (Nominal) Initial New Asset Base + Asset Base (Nominal) Investement) times the base depreciation rate.

41 Tariff Reset Calculations: Asset Base (Nominal) - Final New Asset Base

The Final New Asset Base is equal to the Asset Base (Nominal Investment) times the base depreciation rate.

42 Tariff Reset Calculations: Demand - No Reset

Deterministic

Without risk does not exist for this model.

Stochastic

Household demand is assumed to grow at a exponential rate with some variability around this.

43 Tariff Reset Calculations: Demand - Full Reset

Deterministic

Without risk does not exist for this model.

Stochastic

Household demand is assumed to grow at a exponential rate with some variability around this. Is directly proportional to connections for consumption.

44 Tariff Reset Calculations: Demand - Discounted Demand

Deterministic

Is the multiplication of the Total Demand times Discount Factor. This means the discounted demand is directly proportional to the total demand and the discount factor.

Stochastic

The Discounted Demand is equal to the multiplication of the Demand - Full Reset times the Discount Factors.

45 Tariff Reset Calculations: Demand - Cumulative Discounted Demand

This formula tells us that if year = 0, then we do nothing. If not then if (tariff_period = 1 or the remainder of year/tariff_period = 1), then it is equal to the discounted demand. Else it is equal to the previous year’s cumulative expected demand plus current year’s discounted demand.

46 Tariff Reset Calculations: Demand - 5 Year Discounted Demand

Demand is discounted at the beginning of each reset period for the following reset period. This is used as the denominator in the tariff reset calculations.

47 Tariff Reset Calculations: Return on New Assets (Real) - Contracting Authority

Is the Discount Rate times the sum of the (Initial New Asset Base + Investment) for nominal times the Service Extension Contracting Authority Percentage. The Discount Rate, Service Extension Contracting Authority Percentage, and the sum of the Initial New Asset Base + Investement Coverage Extension are directly proportional to the Return on New Assets.

48 Tariff Reset Calculations: Return on New Assets (Real) - Operator

Is the Discount Rate times the sum of the (Initial New Asset Base + Investment) for nominal times the Service Extension Loan Percentage. The Discount Rate, Service Extension Loan Percentage, and the sum of the Initial New Asset Base + Investement Coverage Extension are directly proportional to the Return on New Assets.

49 Tariff Reset Calculations: Depreciation (Real) - Contracting Authority

Is the multiplication of the Service Extension Contracting Authority Percentage times Depreciation times Deflation Factor.

50 Tariff Reset Calculations: Depreciation (Real) - Operator

Is the multiplication of the Service Extension Loan Percentage times Depreciation times Deflation Factor.

51 Tariff Reset Calculations: Maintenance Costs (Real)

Is the multiplication of the Asset Base (Nominal) Maintenance Costs times Deflation Factor. The Maintenance Costs are direct proportional to the Asset Base (Nominal) Maintenance Costs and Deflation Factor.

52 Tariff Reset Calculations: Domestic Denominated Opex (Real)

Deterministic

Is the multiplication of the Operating Variable Costs Domestic Denomination times Total Demand plus Operating Fixed Costs Domestic Denomination divided by one minus the Consumption of Non-revenue water. The Domestic Denominated Opex is directly proportional to the Operating Variable Costs Domestic Denomination and Total Demand. Also, is inversely proportional to the Consumption of Non-revenue water.

Stochastic

With risk does not exist for this model.

53 Tariff Reset Calculations: Foreign-Denominated Opex (Real)

Deterministic

Is the multiplication of the Operating Variable Costs Foreign Denomination times Total Demand plus Operating Fixed Costs Foreign Denomination divided by one minus the Consumption of Non-revenue water, and the total multiplied by the Real Exchange Rate. The Foreign-Denominated Opex is directly proportional to the Operating Variable Costs Foreign Denomination, Total Demand, and Real Exchange Rate. Also, is inversely proportional to the Consumption of Non-revenue water.

Stochastic

With risk does not exist for this model.

54 Tariff Reset Calculations: Foreign Exchange Rate - No Reset

Deterministic

Without risk does not exist for this model.

Stochastic

Current value of the exchange rate expressed in terms of guaraníes per dollar times the exponential of the depreciation rate. After, do the cumulative product of the exponential raised to the depreciation exchange rate for all the given periods. This will have an exponential increase over a certain period.

55 Tariff Reset Calculations: Foreign Exchange Rate - Full Reset

Deterministic

Without risk does not exist for this model.

Stochastic

Current value of the exchange rate expressed in terms of guaraníes per dollar times the exponential of the depreciation rate. It will have an exponential increase over a certain period.

56 Tariff Reset Calculations: Subsidies (Real)

Lease payments concession fees and license fees can be represented by negative annual payments i.e. payments from the operator to the contracting authority.

57 Tariff Reset Calculations: Revenue Requirement (Real) - Contracting Authority - Revenue Requirement

Is the sum of Return on New Assets (Real) Contracting Authority + Depreciation (Real) Contracting Authority minus Subsidies.

58 Tariff Reset Calculations: Revenue Requirement (Real) - Contracting Authority - Discounted Revenue Requirement

Is the multiplication of the Discount Factors times the Contracting Authority Revenue Requirement. These two factors are directly proportional to the Discounted Revenue Requirements.

59 Tariff Reset Calculations: Revenue Requirement (Real) - Contracting Authority - Cumulative Discounted Revenue Requirement

If the period is 0, then do nothing. If not, then if tariff period is 1, or if the remainder of year divided by tariff period is 1, then return value of discounted revenue requirement. If not, return the sum of previous year’s cumulative discounted revenue requirement and that current year’s discounted revenue requirement.

60 Tariff Reset Calculations: Revenue Requirement (Real) - Operator - Revenue Requirement

Deterministic

Is the sum of Return on New Assets Operator + Depreciation Operator + Maintenance Costs + Domestic Denominated Opex + Foreign-Denominated Opex.

Stochastic

Is the sum of contracting authority’s real return on new assets and contracting authority’s real term depreciation and negative real subsidies to calculate yearly revenue requirements.

61 Tariff Reset Calculations: Revenue Requirement (Real) - Operator - Discounted Revenue Requirements

Is the multiplication of the Discount Factors times the Revenue Requirement Operator. These two factors are directly proportional to the Discounted Revenue Requirements.

62 Tariff Reset Calculations: Revenue Requirements (Real) - Operator - Cumulative Discounted Revenue Requirement

If the period is 0, then do nothing. If not, then if tariff period is 1, or if the remainder of year divided by tariff period is 1, then return value of discounted revenue requirement. If not, return the sum of previous year’s cumulative discounted revenue requirement and that current year’s discounted revenue requirement.

63 Tariff Reset Calculations: Discounted Revenue Requirement - Contracting Authority

Discounted revenue requirement: Revenue requirement is discounted at the beginning of each reset period for the following reset period. This is used as the numerator in the tariff reset calculations.

64 Tariff Reset Calculations: Discounted Revenue Requirement - Operator

Discounted revenue requirement: Revenue requirement is discounted at the beginning of each reset period for the following reset period. This is used as the numerator in the tariff reset calculations.

65 Tariff Reset Calculations: Revenue Required per M3 - No Reset - Contracting Authority

The Revenue Required per M3 No Reset is calculated by the total sum of the Contracting Authority Discounted Revenue Requirement divided by total sum of the Discounted Demand.

66 Tariff Reset Calculations: Revenue Required per M3 - No Reset - Operator

The Revenue Required per M3 No Reset is calculated by the total sum of the Operator Discounted Revenue Requirements divided by total sum of the Discounted Demand.

67 Tariff Reset Calculations: Revenue Required per M3 - 5 year reset period - Contracting Authority

The Revenue Required per M3 5 year reset period is calculated by the Discounted Revenue Requirement Contracting Authority divided by the 5 Year Discounted Demand.

68 Tariff Reset Calculations: Revenue Required per M3 - 5 year reset period - Operator

The Revenue Required per M3 5 year reset period is calculated by the Discounted Revenue Requirement Operator divided by the 5 Year Discounted Demand.

69 Tariff Indexation: Indexation

Indexation is calculated by dividing 1 by the Deflation Factor. Also, is inversely proportional to the Deflation Factor.

70 Tariff Indexation No Reset - Contracting Authority

Contracting Authority is the multiplication of the Indexation times the Revenue Required per M3 (No Reset Contracting Authority). The Contracting Authority is directly proportional to the Indexation and the Revenue Required per M3 (No Reset Contracting Authority).

71 Tariff Indexation: No Reset - Operator

Operator is the multiplication of the Indexation times the Revenue Required per M3 (No Reset Operator). The Operator is directly proportional to the Indexation and Revenue Required per M3 (No Reset Operator)

72 Tariff Indexation: 5 Year Reset Period - Contracting Authority

Contracting Authority for 5 Year Reset Period is the multiplication of the Revenue Required per M3 (5 Year Reset Period Contracting Authority) times the Indexation. The Contracting Authority for 5 Year Reset Period is directly proportional to the Revenue Required per M3 (5 Year Reset Period Contracting Authority) and Indexation.

73 Tariff Indexation: 5 Year Reset Period - Operator

Operator for (5 Year Reset Period) is the multiplication of the Revenue Required per M3 (5 Year Reset Period Operator) times the Indexation. The Operator for (5 Year Reset Period) is directly proportional to the Revenue Required per M3 (5 Year Reset Period Operator) and indexation.

74 Profit: Total Revenue Collected - No Reset

Total Revenue Collected No Reset is the sum of No Reset Operator plus the No Result Contracting Authority and take the result and multiply it by the Total Demand (M3) and Collection Rate Forecast.

75 Profit: Total Revenue Collected - 5 Year Reset Period

Total Revenue Collected 5 Year Reset Period is the sum of 5 Year Reset Period Operator plus the 5 Year Reset Period Contracting Authority and take the result and multiply it by the Total Demand (M3) and Collection Rate Forecast.

76 Profit: Costs - Operating Costs

Deterministic

Operating Costs without risk is the sum of Domestic Denominated Opex plus Foreign-Denominated Opex and take the result of this addition and multiply it by the Indexation. Operating Costs is directly proportional to the Indexation and to the result of the sum previously stated.

Stochastic

77 Profit: Costs - Maintenance Costs

Maintenance Costs is the multiplication of the Tariff Reset Calculations Maintenance Costs times the Tariff Indexation. The Maintenance Costs are directly proportional to the Tariff Reset Calculations Maintenance Costs and the Tariff Indexation.

78 Profit: Costs - Return On Capital

Return On Capital is the sum of Return on New Assets (Real) Contracting Authority plus Return on New Assets (Real) Operator and take the result, and multiply it by the Indexation. The Return On Capital is directly proportional to the Indexation and the result of the sum previously stated.

79 Profit: Costs - Depreciation

Depreciation Profit is the sum of Depreciation Contracting Authority plus Depreciation (Real) Operator and take the result, and multiply it by the Indexation. The Depreciation for Profit is directly proportional to the Indexation and the result of the sum previously stated.

80 Profit: Costs - Subsidies

Subsidies is the multiplication of the negative Tariff Reset Calculations Subsidies times the Indexation.

81 Profit: Costs - Total

The Total Costs Profit is the sum of the Operating Costs plus the Maintenance Costs plus Return On Capital plus Depreciation plus Subsidies.

82 Profit: Present Value Profit (Real) - No Reset

The Present Value Profit (Real) No reset is calculated by subtracting the Costs Total from the Total Revenue Collected No Reset and the result multiply it by the Deflation Factor and the Discount Factor.

83 Profit: Present Value Profit (Real) - 5 Year Reset Period

The Present Value Profit (Real) 5 Year Reset Period is calculated by subtracting the Costs Total from the Total Revenue Collected Total Revenue Collected 5 Year Reset Period and the result multiply it by the Deflation Factor and the Discount Factor.

84 Cash Flows: No Reset - Contracting Authority

Present value of cash flows to the operator and the contracting authority, expressed in millions of guaraníes. Taking into account the Contracting Authority No Reset.

85 Cash Flows: No Reset - Operator

Present value of cash flows to the operator and the contracting authority, expressed in millions of guaraníes. Taking into account the Operator No Reset.

86 Cash Flows: 5 Year Reset Period - Contracting Authority

Present value of cash flows to the operator and the contracting authority, expressed in millions of guaraníes. Taking into account the Contracting Authority 5 Year Reset Period.

87 Cash Flows: 5 Year Reset Period - Operator

Present value of cash flows to the operator and the contracting authority, expressed in millions of guaraníes. Taking into account the Operator 5 Year Reset Period.

88 Debt Service Ratio: Cash Flow Before Loan Repayment - No Reset

Debt-service ratio is the total cash flow of the operator divided by financing costs. If the operator has no responsibility in the financing of coverage extension, this ratio is undefined.

89 Debt Service Ratio: Cash Flow Before Loan Repayment - 5 Year Reset Period

Debt-service ratio is the total cash flow of the operator divided by financing costs. If the operator has no responsibility in the financing of coverage extension, this ratio is undefined.

90 Debt Service Ratio: Debt Service Ration - No Reset

The Debt Service Ration No Reset is the division of Cash Flow Before Loan Repayment No Reset divided by the Interest Payment. If the Debt Service Ration is Infinite it will be a Null Value. The Debt Service Ration is directly proportional to the Cash Flow Before Loan Repayment and inversely proportional to the Interest Payment.

91 Debt Service Ratio: Debt Service Ratio - 5 Year Reset Period

The Debt Service Ration 5 Year Reset Period is the division of Cash Flow Before Loan Repayment 5 Year Reset Period divided by the Interest Payment. If the Debt Service Ration is Infinite it will be a Null Value. The Debt Service Ration is directly proportional to the Cash Flow Before Loan Repayment and inversely proportional to the Interest Payment.

92 Stakeholder Analysis: Water Use & Consumption - Private Household Connection

Water Use & Consumption for Private Household Connection is assumed to grow at a exponential rate with some variability around this.

93 Stakeholder Analysis: Water Use & Consumption - Other Sources

Deterministic

Current usage of water from other sources expressed as liters per household per day. The Water Use & Consumption for Other Sources without risk is calculated by taking the cumulative product over a certain period. It will have an expontential increase over a period of time.

Stochastic

Household demand is assumed to grow at a constant rate with some variability around this. The Water Use & Consumption for other Sources with risk is calculated by taking the expontential with some degree of variability. This will have an expontential increase over a period of time.

94 Stakeholder Analysis: Monthly Cost - Private Household Connection - 5 Year Reset Period

The Existing Tariff Connected is charged to households that are connected to the water system prior to the introduction of the private operator expressed in terms of guaraníes per cubic meter. Private Household Connection is the multiplication of the sum of 5 Year Reset Period Contracting Authority plus 5 Year Reset Period Operator times Demand (L/CONNECTION/DAY). Private Household Connection over a 5 Year Reset Period is directly proportional to the Demand and the sum of Contracting Authority and Operator.

95 Stakeholder Analysis: Monthly Cost - Private Household Connection - Existing Tariffs

The Monthly Cost Private Household Connection is the multiplication of the Existing Tariff times the Water Use & Consumption for Private Household Connection times the Indexation.

96 Stakeholder Analysis: Other Sources

The Existing Other Tariff charged to households that obtain water from other methods e.g. water tankers river sources expressed in terms of guaraníes per cubic meter. The Stakeholder Analysis for Other Sources is equal to the multiplication of the Other Existing Tariff times the Water Use & Consumption Other Sources divided by the Deflation Factor.

97 Stakeholder Analysis: Monthly Coping Cost - Other Sources

The Existing Copying Tariff that has additional cost incurred by unconnected households in order to obtain water such as time traveled to river source cost of installing water storage. The Monthly Coping Cost for Other Sources is equal to the division of the Existing Copying Tariff divided by the Deflation Factors.

98 Stakeholder Analysis: Willingness To Pay - Private Household Connection

Willingness to pay per cubic meter for a household connections versus other sources expressed as a percentage of what is currently charged. The Willingness To Pay for Private Houshold Connection is equal to the multiplication of the Willingness To Pay times the Existing Tariff Connected times the Water Use & Consumption for Private Household Connection take the result and divided it by the Deflation Factor.

99 Stakeholder Analysis: Willingness To Pay - Other Sources - Monthly Cost

Willingness to pay per cubic meter for a household connections versus other sources expressed as a percentage of what is currently charged. The Willingness To Pay for Private Houshold Connection is equal to the multiplication of the Willingness To Pay times the Existing Tariff Other times the Water Use & Consumption for Others take the result and divided it by the Deflation Factor.

100 Stakeholder Analysis: Willingness To Pay - Other Sources - Monthly Coping Cost

Willingness to incur coping costs to remain unconnected to the water system. The Willingness To Pay for Other Sources Monthly Coping Cost is calculated by multiplying the Willingness to incur coping costs times the Existing Tariff Copying Cost divided by the Deflation Factor.

101 Stakeholder Analysis: Change In Social Welfare (Real) - Private Household Connection

The Change In Social Welfare for Private Household Connection is calculated by subtracting the Monthly Cost Private Household Connection Existing Tariffs from the Monthly Cost Private Household Connection 5 Year Reset Period then taking the result and multiply it by the Consumption Connections times the Deflation Factor times the Discount Factor and dividing the result by the Monetary Denominations.

102 Stakeholder Analysis: Change In Social Welfare (Real) - Other Sources

The Change In Social Welfare for Other Sources is calculated by adding the Willingness To Pay for Other Sources Monthly Cost plus Willingness To Pay for Other Sources Monthly Coping Cost plus Willingness To Pay for Private Household Connection, then subtract the Stakeholder Analysis Monthly Coping Cost minus Stakeholder Analysis for Other Sources minus Stakeholder Analysis Monthly Cost Private Household Connection 5 Year Reset Period, after multiply it by the Consumption New Connections times the Deflation Factors times the Discount Factor, and finally divide the result by the Monetary Denominations.