AddExistIntangible

Description

Adds an existing intangible asset.

Formula

SET CREATENONMISSINGBLK ON;

VAR numAsset = [NumAsset];
VAR periodOffset = 0;
VAR amortMethod = 0;
VAR amortRate = 0;
VAR numAmortPeriods = 0;
VAR priorAccumAmort = 0;
VAR basicCost = 0;
VAR salvageVal = 0;
VAR amortAmt = 0;
VAR retirementCosts = 0;
VAR retirementObs = 0;
VAR impairmentDate1 = 0;
VAR impairmentDate2 = 0;
VAR impairmentFairVal1 = 0;
VAR impairmentFairVal2 = 0;
VAR inServiceDate = 0;
VAR delayedStartDate = 0;
VAR prematureEndDate = 0;
VAR maintenanceCost = 0;
VAR insuranceCost = 0;
VAR purchaseDate = 0;
VAR capitalizePct = 0;
VAR impairmentOpt = 1;
VAR numRemainingPers;
VAR intangibleNet;
VAR netValue;
VAR saleValue;
VAR yearVal;
VAR monthVal;
VAR paramsSet = 0;
VAR preExistingPers = 0;
VAR setStartAmort = 0;

FIX(@CHILDREN("Base SPs"), [Hidden_Scenario], [Hidden_Version],  [Department], [AssetClassInt])

/* Find a new asset line item */
FIX("No Year", "BegBalance")
"Asset Description" (

IF (numAsset > 0 AND @MAXS(SKIPMISSING, @CHILDREN("Asset Properties")) == #MISSING )
    numAsset = numAsset - 1;
    "Asset Status" = 0;    /* Indicate that we have a new asset */
    "Asset Description" = [AssetDesc];
    "Acquisition Costs" = [AcquisitionCost];
    "Additional Charges" = [AdditionalCharges];
    "Asset Units" = 1;
    "Salvage Input" = [SalvageValue];
    "Salvage" = [SalvageValue] * "Asset Units";
    "Asset Rate" = "Acquisition Costs" +  "Additional Charges";
    "Basic Cost" = "Acquisition Costs" +  "Additional Charges";
    "Useful Life (in Years)" = "No Scenario"->"No Version"->"No Entity"->"Global"->"Useful Life (in Years)";  
    "Purchase Date" = [PurchaseDate];
    "In Service Date" = [InserviceDate];

    IF ("In Service Date" < "Purchase Date")
        "In Service Date" = "Purchase Date";
    ENDIF
ENDIF
);
ENDFIX

/* Amortization section */
FIX (@LEVMBRS("Period", 0) @LEVMBRS("Year", 0))
"Amortization"(

/* Only calc valid asset line items */
IF ("No Year"->"BegBalance"->"Asset Status" >= 0)

IF (@ISMBR("BegBalance") AND paramsSet == 0)
    /* Initialized all the variables required to calculate depreciation */
    paramsSet = 1;
 
    /* eliminate days from date */
    delayedStartDate = @INT("No Year"->"Delayed Start Date" / 100) * 100;
    prematureEndDate = @INT("No Year"->"Premature End Date" / 100) * 100;
    purchaseDate = @INT("No Year"->"Purchase Date" / 100) * 100;
    inServiceDate = @INT("No Year"->"In Service Date" / 100) * 100;       

    /* Initialize for amortization calc in next section */
    basicCost = "No Year"->"Basic Cost";
    salvageVal = "No Year"->"Salvage Input" * "No Year"->"Asset Units";
    impairmentOpt = "No Year"->"Impairment Option";
    capitalizePct = "No Year"->"Partial Capitalize %";
    saleValue = "No Year"->"Sale Value";
    retirementCosts = "No Year"->"Retirement Costs";
    retirementObs = "No Year"->"Retirement Obligation";

    amortMethod = "No Year"->"No Scenario"->"No Version"->"No Entity"->"Global"->"Amortization Method";

    insuranceCost = basicCost * "No Year"->"No Scenario"->"No Version"->"No Entity"->"Global"->"Insurance %";
    maintenanceCost = basicCost * "No Year"->"No Scenario"->"No Version"->"No Entity"->"Global"->"Maintenance %";

    IF ("No Year"->"Impairment Date1" <> #MISSING)
        impairmentDate1 = @INT("No Year"->"Impairment Date1" / 100) * 100;
    ELSE
        impairmentDate1 = #MISSING;
    ENDIF
    IF ("No Year"->"Impairment Date2" <> #MISSING)
        impairmentDate2 = @INT("No Year"->"Impairment Date2" / 100) * 100;
    ELSE
        impairmentDate2 = #MISSING;
    ENDIF
    
    impairmentFairVal1 =  "No Year"->"Impairment Fair Value1";       
    impairmentFairVal2 =  "No Year"->"Impairment Fair Value2";

    /* check if we have a pre-existing asset */
    IF (inServiceDate < "First Date")
        yearVal = (@INT("First Date" / 10000) * 10000 - @INT(inServiceDate / 10000) * 10000) / 10000;
        monthVal = ("First Date" - @INT("First Date" / 10000) * 10000) - (inServiceDate - @INT(inServiceDate / 10000) * 10000);
        IF (monthVal < 0)
            IF (yearVal > 0)
                yearVal = yearVal - 1;
            ENDIF
            monthVal = 1200 + monthVal;
        ENDIF
        preExistingPers = @ROUND(yearVal * 12 + monthVal / 100, 0);
        setStartAmort = 1;
    ELSE
        preExistingPers = 0;
        setStartAmort = 0;
    ENDIF

    numAmortPeriods = 0; 
    periodOffset = 0;
   
    IF (amortMethod == 1)
        priorAccumAmort = 0;
        amortAmt = 0;          
        yearVal = @INT(inServiceDate / 10000) * 10000;   
        monthVal = (inServiceDate - @INT(inServiceDate / 10000) * 10000);     
    ENDIF

ENDIF

IF (@ISMBR("No Year") AND @ISMBR("BegBalance"))
    paramsSet = 0;
    IF ("Asset Status" == 0)
        "Asset Status" = 1;
    ENDIF
ENDIF

IF (NOT @ISMBR("BegBalance") AND paramsSet == 1)

    /* clear out any previously calculated values */ 
    "Amortization" = #MISSING;
    "Accumulated Amortization" = #MISSING;    
    "Intangible Assets Finite, Gross" = #MISSING;
    "Loss/(Gain) on Sale of Intangibles" = #MISSING;
    "Proceeds from Sale of Intangibles" = #MISSING;

    "Cash Flow Allocator" = #MISSING;
    "Funding Allocator" = #MISSING;
    "Cash Outflow from Capital Additions" = #MISSING;
    "Cash Inflow from Funding" = #MISSING;
    "Long Term Debt" = #MISSING;
    "Insurance" = #MISSING; 
    "Maintenance" = #MISSING;
    "Impairment of Assets" = #MISSING;
    "Retirement Expenses" = #MISSING;
    "Capital Reserve" = #MISSING;
    "Capital Expenditure" = #MISSING;

/* Commented out for now need to verify 
    IF ("TP-Date" == purchaseDate AND (delayedStartDate == #MISSING OR (delayedStartDate > #MISSING AND "TP-Date" > delayedStartDate)))
        "Capital Expenditure" = basicCost - retirementObs;
    ENDIF
*/

    /* Check if we should start amortization */
    IF (("TP-Date" == inServiceDate) OR (setStartAmort == 1))
        setStartAmort = 0;
        periodOffset = 0;
        numAmortPeriods = "NumPeriods" * "No Year"->"BegBalance"->"Useful Life (in Years)";
        insuranceCost = insuranceCost / "NumPeriods";
        maintenanceCost = maintenanceCost / "NumPeriods";    
        intangibleNet = basicCost;
        amortAmt = (basicCost - salvageVal) / numAmortPeriods;

        /* Adjust for pre existing assets */
        IF (preExistingPers > 0)
            numAmortPeriods = numAmortPeriods - preExistingPers;
            IF (numAmortPeriods > 0)
                priorAccumAmort = amortAmt * preExistingPers;
            ENDIF
        ENDIF

        numRemainingPers = numAmortPeriods;
    ENDIF
    
    /* Amortization calculation section */    
    IF (amortMethod == 1 AND periodOffset < numAmortPeriods)                    

        /* If capitalized book in Capital Reserve instead of Impairment */
        IF ("TP-Date" == impairmentDate1)
            IF (impairmentOpt == 1)
                "Impairment of Assets" = intangibleNet - impairmentFairVal1;    
            ELSEIF (impairmentOpt == 2)
                "Capital Reserve" = intangibleNet - impairmentFairVal1;    
            ELSEIF (impairmentOpt == 3)
                "Capital Reserve" = (intangibleNet - impairmentFairVal1) * capitalizePct;
                "Impairment of Assets" = intangibleNet - impairmentFairVal1 - "Capital Reserve";
            ENDIF
            basicCost = basicCost - (intangibleNet - impairmentFairVal1);
            amortAmt = impairmentFairVal1 / numRemainingPers;
        ELSEIF ("TP-Date" == impairmentDate2)
            IF (impairmentOpt == 1)
                "Impairment of Assets" = intangibleNet - impairmentFairVal2;    
            ELSEIF (impairmentOpt == 2)
                "Capital Reserve" = intangibleNet - impairmentFairVal2;    
            ELSEIF (impairmentOpt == 3)
                "Capital Reserve" = (intangibleNet - impairmentFairVal2) * capitalizePct;
                "Impairment of Assets" = intangibleNet - impairmentFairVal2 - "Capital Reserve";
            ENDIF
            basicCost = basicCost - (intangibleNet - impairmentFairVal2);
            amortAmt = impairmentFairVal2 / numRemainingPers;        
        ENDIF

        IF (periodOffset + 1 == numAmortPeriods)
            amortAmt = (basicCost - salvageVal) - priorAccumAmort;
        ENDIF                
                     
        priorAccumAmort = priorAccumAmort + amortAmt;
        intangibleNet = basicCost - priorAccumAmort;
      
        /* Only assign values to member if we are in range */
        IF ("TP-Date" >= delayedStartDate AND ("TP-Date" >= inServiceDate OR preExistingPers > 0) AND (prematureEndDate == #MISSING OR "TP-Date" < prematureEndDate))

            "Intangible Assets Finite, Gross" = basicCost;
            "Amortization" = amortAmt;
            "Accumulated Amortization" = priorAccumAmort;            
            "Insurance" = insuranceCost; 
            "Maintenance" = maintenanceCost;
        ENDIF
        
        /* Set the loss/gain if we had a sale or writeoff */
        IF ("TP-Date" == prematureEndDate)
            IF ("No Year"->"BegBalance"->"Reason Ended" == 2 OR
                 "No Year"->"BegBalance"->"Reason Ended" == 3)
                netValue = basicCost - priorAccumAmort + retirementCosts;
                IF ("No Year"->"BegBalance"->"Reason Ended" == 3)
                    "Loss/(Gain) on Sale of Intangibles" = netValue - saleValue + amortAmt;
                ELSE
                    "Loss/(Gain) on Sale of Intangibles" = netValue + amortAmt;
                ENDIF
                "Retirement Expenses" = retirementCosts - retirementObs;          
                "Proceeds from Sale of Intangibles" = saleValue - retirementCosts;
            ENDIF            
        ENDIF

        periodOffset = periodOffset +1;
        numRemainingPers = numRemainingPers -1;
    ENDIF 
ENDIF

ENDIF
);
ENDFIX

ENDFIX

FIX([Hidden_Scenario], [Hidden_Version],  [Department]) 
    @IANCESTORS("Line Item 1");
    @ANCESTORS([AssetClassInt]);
ENDFIX