MA – Income Computation

Mass Appraisal (MA) Income Computation

[In Development]

Overview

Purpose

The purpose of the Income Computation is to provide values for the Govern system columns for a given record of the table MA_INCOME (prior version MA_INC_INFO is now merged into it).
The ultimate goal of this compute is to provide a DIR (Direct Income Revenue/CAP) value and GRM (Gross Revenue Multiplier) value. Conceptually the DIR or GRM value is calculated with a rent rate multiplied by a number of rent units. This initial income value is then adjusted based on income quality, the vacancy, shortfall adjustments, other income, defined expenses, MA_SITE adjustments (see the Site adjustment specification document).

The income value is either an economic income value (default, we have up to 5 economic models), an actual value depending on the income model code (actual_economical).
It is always stored in MA_INCOME.NET_DIR and MA_INCOME.NET_GRM.

Important Notes Regarding the Computation

Auto Select Unique Code

When only one code is available and the Auto Select Unique Code option is selected, that code is used for the compute. This applies regardless of what the user has previously selected.

It applies, for example, if the code is changed in GNA, after the user set the code on the form. The update is made when either the property record is opened and resaved or the Mass Appraisal Compute batch process is run.

Is Required

If you select the Is Required option for a code after the user has created property records, you must verify that a code is selected for those records. Otherwise, an error is raised and the compute fails.

Registry and Constant

The following parameters are used for the setup and/or impact the lookup of codes or value computation.

  • PROPERTY_TYPE_FROM_PC_LEGAL = (‘yes’ or ‘no’) If no, it will use the income property type defined with the cat or model? (validate).
  • EXP_BY_CATEGORY = “Mass Appraisal”, “Associate Inc Expense to Category” = (‘yes’ or ‘no’)
  • EXP_BY_CATEGORY _EFFECTIVE = “Mass Appraisal”, “Associate Inc Expense to Category Year Effective” = smallInt (default global year_id)

Abandoned in version 6.1

  • COMPATIBILITY_INCOME_COMPUTE= “Mass Appraisal”, “Compatibility INC Compute” = (‘yes’ or ‘no’)
  • COMPATIBILITY_INCOME_COMPUTE_EFFECTIVE = “Mass Appraisal”, “Compatibility INC Compute Year Effective” = smallInt

Table Used and available for the expressions

Income Tables & Fields

  • MA_INCOME
  • MA_INCOME.CATEGORY_CODE -> MA_PARM_INCOME.CATEGORY_CODE
  • MA_INCOME.USED_AS_CODE -> MA_PARM_INCOME.CATEGORY_CODE
  • MA_INCOME.INCOME_GROUP -> MA_PARM_INCOME.INCOME_GROUP
  • MA_INCOME_DETAIL
NOTE: All economic model values base on parameters (MA_PARM_INCOME)

 

All fields below based on income model chosen in MA_INCOME

  • MA_INCOME.DIR_RATE -> MA_PARM_INCOME.DIR_RATE_EXPRESSION_x(e1,e2,e3,e4,e5)
  • MA_INCOME.GRM_RATE -> MA_PARM_INCOME.GRM_RATE_EXPRESSION_x(…)
  • MA_INCOME.RENT_UNIT_TYPE -> MA_PARM_INCOME.RENT_UNIT_TYPE ?? (validate)
  • MA_INCOME.GROSS_RENT_RATE -> MA_PARM_INCOME.GROSS_RENT_RATE_EXPRESSION _x(….)
  • MA_INCOME.VACANCT_PCT -> MA_PARM_INCOME.VACANCT_PCT_EXPRESSION_x(….)
  • MA_INCOME.OTHER_INCOME -> MA_PARM_INCOME.OTHER_INCOME_PCT_EXPRESSION_x(….)
  • MA_INCOME.SHORTFALL_PCT -> MA_PARM_INCOME.SHORTFALL_PCT_EXPRESSION_x(….)

Use property type from legal or define for income

  • MA_INCOME.P_ID -> PC_LEGAL_INFO.P_ID (Only if PROPERTY_TYPE_FROM_PC_LEGAL = “yes” and MA_PARM_INCOME.PROPERTY_TYPE is NULL)

Income Table Categories

  • MA_TABLES.TABLE_CATEGORY = “inc” and TABLE_TYPE=’income’ (income category)
  • MA_TABLES.TABLE_CATEGORY = “inc” and TABLE_TYPE=’incqua’ (income quality)
  • MA_TABLES.TABLE_CATEGORY = “inc” and TABLE_TYPE=’incadj’ (income overall adjustment)
  • MA_TABLES.TABLE_CATEGORY = “inc” and TABLE_TYPE=’incexp’ (income expense)
  • MA_TABLES.TABLE_CATEGORY = “inc” and TABLE_TYPE=’incitem’ (income rental detail adjustment)
  • MA_INCOME.YEAR_ID -> MA_MODIF_STAMP.YEAR_ID

Rounding

  • MA_PARM_MAROUND.ROUNDING_CODE = “inc” (income rounding)

 

System Columns (Calculated Fields)

The following system columns cannot be used in expressions stored in the MA_PARM tables nor should they be editable:
Income Fields

Rental dir_rate grm_rate
rent_unit_type rent_net_units
Gross Rent gross_rent_percent gross_rent_rate gross_rent_value
Income Quality inc_quality_pct inc_quality_unit inc_quality_value
Vacancy vacancy_pct vacancy_unit vacancy_value
Other Income other_income
Shortfall shortfall_pct shortfall_value
Room Occupancy % rm_occupancy_pct
Percent Unit Value
Expenses room_exp_pct room_exp_unit room_exp_value
food_exp_pct food_exp_unit food_exp_value
telecom_exp_pct telecom_exp_unit telecom_exp_value
dept_exp_pct dept_exp_unit dept_exp_value
other_exp_pct other_exp_unit other_exp_value
fixed_exp_pct fixed_exp_unit fixed_exp_value
operating_ex_pct operating_ex_unit operating_ex_value
replace_exp_pct replace_exp_unit replace_exp_value
misc_exp_pct misc_exp_unit misc_exp_value
taxes_exp_pct taxes_exp_unit taxes_exp_value
ffe_exp_pct ffe_exp_unit ffe_exp_value
Net Rental net_percent net_unit net_value
Overall Adjustment overall_adj_pct overall_adj_unit overall_adj_value
Gross Effective gross_effective
Gross Income income_dir income_grm
Net Income net_dir net_grm
Site Adjustment site_adj_pct site_adj_unit site_adj_value
Final Adjustment final_adj_dir final_adj_grm

 

Lookup Group

Many of the parameters used in the income computation depend on a lookup group. All the lookup groups are stored in the table MA_LOOKUP_GROUP and can be can be of the following types:

  • By neighborhood, By property type, By income neighborhood, By jurisdiction, By jurisdiction AND neighborhood, By jurisdiction AND income neighborhood

Look-Up Group Example:
We have an income record for the year 2015 with CATEGORY_CODE = “2212”. We want to get the income category information which is defined in the table MA_PARM_INCOME where the primary key is CATEGORY_CODE, YEAR_ID and LOOKUP_GROUP. We already have the year and the category code (2015 and “2212”) but we now need the lookup group.
Next we go to the table MA_LOOKUP_GROUP and get all the records with TABLE_NAME=”income”[1], YEAR_ID=2015 and CAMA_CODE=”2212”.
In our example, this lookup group is By jurisdiction and neighborhood so it will look like this:
LOOKUP_GROUP JURISDICTION NBHD
0 Null Null
1 31572 Null
2 31572 015
3 31572 016
4 31513 Null
5 31513 012
Here are some possible scenarios depending on the jurisdiction and neighborhood for the income record:

  • If Jurisdiction=31572 and Nbhd=015, then Lookup_Group=2
  • If Jurisdiction=31572 and Nbhd=020, then Lookup_Group=1
  • If Jurisdiction=45875 and Nbhd=015, then Lookup_Group=0

Properties required to get the lookup group

  • Jurisdiction:Use PC_PARCEL.JURISDICTION based on MA_INCOME.P_ID = PC_PARCEL.P_ID.
  • Neighborhood and Income neighborhood: Use PC_AREA.NBHD and PC_AREA.INC_NBHD based MA_INCOME.P_ID = PC_AREA.P_ID and MA_INCOME.FROZEN_ID = PC_AREA.FROZEN_ID.
  • Property type: Use MA_PARM_INCOME.PROPERTY_TYPE based on MA_INCOME.CATEGORY_CODE = MA_PARM_INCOME.CATEGORY_CODE and MA_INCOME.YEAR_ID = MA_PARM_INCOME.YEAR_ID. If no information is found in MA_PARM_INCOME then we’ll use a blank property type (15 spaces). This is a table that depends itself on a lookup group. If the lookup group is By property type then for the purpose of the lookup we must use the PROPERTY_TYPE defined in PC_LEGAL_INFO.PROPERTY_TYPE.

[1] The table name changes for each type of parameter; in the case of adjustments defined in MA_TABLE, we use MA_TABLE.TABLE_NAME

Step 1 – Get Income Parameters

Get the income parameter based on MA_INCOME.USED_AS_CODE or CATEGORY_CODE and economic income model MA_INCOME.ACTUAL_ECONOMICAL.

 

Step 2 – Get Income Percentage & Rate

The percentage is established by getting MA_PARM_INCOME based on income model MA_INCOME.ACTUAL_ECONOMICAL (1, 2, 3, 4, 5)

  • MA_INCOME.DIR_RATE = DIR_RATE_EXPRESSION_x
  • MA_INCOME.GRM_RATE = GRM_RATE_EXPRESSION_x
  • MA_INCOME.RENT_UNIT_TYPE = RENT_UNIT_TYPE
  • MA_INCOME.GROSS_RENT_RATE = GROSS_RENT_RATE_EXPRESSION_x
  • MA_INCOME.VACANCY_PCT = VACANCY_PCT_EXPRESSION_x
  • MA_INCOME.OTHER_INCOME = OTHER_INCOME_PCT_EXPRESSION_x

Get the expenses from parameter (by percent, by unit or by value ORDER)

  • MA_INCOME.ROOM_EXP_PCT = ROOM_EXP_PCT_EXPRESSION_x | MA_INCOME.ROOM_EXP_UNIT = ROOM_EXP_UNIT_EXPRESSION_x | MA_INCOME.ROOM_EXP.VALUE = ROOM_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.FOOD_EXP_PCT = FOOD_EXP_PCT_EXPRESSION_x | MA_INCOME.FOOD_EXP_UNIT = FOOD_EXP_UNIT_EXPRESSION_x | MA_INCOME.FOOD_EXP.VALUE = FOOD_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.TELECOM_EXP_PCT = TELECOM_EXP_PCT_EXPRESSION_x | MA_INCOME.TELECOM_EXP_UNIT = TELECOM_EXP_UNIT_EXPRESSION_x | MA_INCOME.TELECOM_EXP.VALUE = TELECOM_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.DEPT_EXP_PCT = DEPT_EXP_PCT_EXPRESSION_x | MA_INCOME.DEPT_EXP_UNIT = DEPT_EXP_UNIT_EXPRESSION_x | MA_INCOME.DEPT_EXP.VALUE = DEPT_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.OTHER_EXP_PCT = OTHER_EXP_PCT_EXPRESSION_x | MA_INCOME.OTHER_EXP_UNIT = OTHER_EXP_UNIT_EXPRESSION_x | MA_INCOME.OTHER_EXP.VALUE = OTHER_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.FIXED_EXP_PCT = FIXED_EXP_PCT_EXPRESSION_x | MA_INCOME.FIXED_EXP_UNIT = FIXED_EXP_UNIT_EXPRESSION_x | MA_INCOME.FIXED_EXP.VALUE = FIXED_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.OPERATING_EX_PCT = OPERATING_E_PCT_EXPRESSION_x | MA_INCOME. OPERATING_EX_UNIT = OPERATING_E_UNIT_EXPRESSION_x | MA_INCOME. OPERATING_EX.VALUE = OPERATING_E_VALUE_EXPRESSION_x
  • MA_INCOME.REPLACE_EXP_PCT = REPLACE_EXP_PCT_EXPRESSION_x | MA_INCOME.REPLACE_EXP_UNIT = REPLACE_EXP_UNIT_EXPRESSION_x | MA_INCOME.REPLACE_EXP.VALUE = REPLACE_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.MISC_EXP_PCT = MISC_EXP_PCT_EXPRESSION_x | MA_INCOME.MISC_EXP_UNIT = MISC_EXP_UNIT_EXPRESSION_x | MA_INCOME.MISC_EXP.VALUE = MISC_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.TAXES_EXP_PCT = TAXES_EXP_PCT_EXPRESSION_x | MA_INCOME.TAXES_EXP_UNIT = TAXES_EXP_UNIT_EXPRESSION_x | MA_INCOME.TAXES_EXP.VALUE = TAXES_EXP_VALUE_EXPRESSION_x
  • MA_INCOME.FFE_EXP_PCT = FFE_EXP_PCT_EXPRESSION_x | MA_INCOME.FFE_EXP_UNIT = FFE_EXP_UNIT_EXPRESSION_x | MA_INCOME.FFE_EXP.VALUE = FFE_EXP_VALUE_EXPRESSION_x

 

Step 3 – Initialize Values

Set all computed value fields to zero (VB6 : pv_set_to_zero_inc_info, pv_reset_rent)(ResetSystemFields, ResetRentalDetailFields)

Set to zero all system fields (calculated fields) in MA_INCOME

 

Step 4 – Income Rental Detail Calculation

Income detail calculation is also based on income model. The gross rent rate (MA_INCOME_DETAIL.GROSS_RENT_RATE) is taken from MA_PARM_INC_SUBCAT.RENT_RATE_EXPRESSION_x when model is economic model or user entered when model is actual. If no rate defined in sub category parameter, gross rent rate will be taken from income parameter MA_PARM_INCOME.GROSS_RENT_RATE_EXPRESSION_x

If Room Occupancy Percent is defined and rental type =’room’, we will use Room Occupancy Percent, otherwise, the percent is taken from gross_rent_percent.

  • MA_INCOME_DETAIL. RENT_NET_UNITS= MA_INCOME_DETAIL. RENT_UNITS* gross rent percent/100
  • MA_INCOME_DETAIL. GROSS_RENT_VALUE= MA_INCOME_DETAIL. RENT_NET_UNITS* gross rent rate
  • If MA_INCOME_DETAIL. RATE_PERIOD=’m’ (monthly rate) then
    • MA_INCOME_DETAIL. GROSS_RENT_VALUE*12
  • If MA_INCOME_DETAIL. RATE_PERIOD=’d’ (daily rate) then
    • MA_INCOME_DETAIL. GROSS_RENT_VALUE*365

If income rental detail record is the vacant record and has a number of vacant months then

  • MA_INCOME_DETAIL. GROSS_RENT_VALUE =MA_INCOME_DETAIL. GROSS_RENT_VALUE/12

*number of vacant months

 

Step 5 – Compute Rental Detail Adjustments

The income rental detail adjustment are defined as all MA_TABLES records having a TABLE_TYPE = “incitem” AND INC_ITEM_CODE = “a”.

NOTE:
Auto Select Unique Code
When only one code is available and the Auto Select Unique Code option is selected, that code is used for the compute. This applies regardless of what the user has previously selected.
It applies, for example, if the code is changed in GNA, after the user set the code on the form. The update is made when either the property record is opened and resaved or the Mass Appraisal Compute batch process is run.

Is Required
If you select the Is Required option for a code after the user has created property records, you must verify that a code is selected for those records. Otherwise, an error is raised and the compute fails.

a) Calculate the Adjustment Value [VA]
For each adjustment we calculate the adjustment value MA_INCOME_DETAIL.(MA_TABLES.COLUMN_NAME)_VA
If no code [CD] is recorded in the income detail record entered, the value is set to NULL

  • MA_INCOME_DETAIL.(MA_TABLES.COLUMN_NAME)_CD is null
  • Then MA_INCOME_DETAIL.(MA_TABLES.COLUMN_NAME)_VA is set to NULL

If a code [CD] is recorded, the expression is evaluated (computed) and stored in the value [VA]

  • MA_INCOME_DETAIL.(MA_TABLES.COLUMN_NAME)_VA = evaluated from the expression in MA_PARM_INCITEM.EXPRESSION

b) Perform the adjustment by selecting ( all non nulls MA_INCOME_DETAIL.(column)_VA for MA_TABLES.INC_ITEM_CODE = “a”. where MA_INCOME_DETAIL.(column)_OV = 0 ) OR selecting ( all non nulls MA_INCOME_DETAIL.(column)_OV_VALUE for MA_TABLES.INC_ITEM_CODE = “a” where MA_INCOME_DETAIL.(column)_OV = -1 )

There are 4 MATHS sign +,-,X,/ and 2 kinds of values a (amount), p (percentage) [PCT_AMT] We take the starting gross rent value previously calculated MA_INCOME_DETAIL.GROSS_RENT_VALUE and we apply every adjustment to it.
Adjustments are cumulative.

Case MATHS = ‘+’

  • If PCT_AMT = ‘a’ then we add MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE)
  • If PCT_AMT = ‘p’ then we first apply the percentage represented by MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE) and then we add the result to the value. Example gross rent value = 10 MA_INCOME_DETAIL.BEDS_VA = 5 then (10 X 5%) + 10 = 10.50

Case MATHS = ‘-’

  • If PCT_AMT = ‘a’ then we subtract MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE)
  • If PCT_AMT = ‘p’ then we first apply the percentage represented by MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE) and then we subtract the result to the value. Example gross rent rate = 10 MA_INCOME_DETAIL.BEDS_VA = 5 then (10 X 5%) + 10 = 9.50

Case MATHS = ‘X’

  • If PCT_AMT = ‘a’ then we multiply MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE).
  • If PCT_AMT = ‘p’ then we multiply by the percentage represented by MA_INCOME_DETAIL.(column_name)_VA to the value (GROSS_RENT_VALUE) . Example gross rent value = 10 MA_INCOME_DETAIL.BEDS_VA = 90 then (10 X 90%) = 9

Case MATHS = ‘/’

  • If PCT_AMT = ‘a’ then we divide the value (GROSS_RENT_VALUE) by MA_INCOME_DETAIL.(column_name)_VA
  • If PCT_AMT = ‘p’ then we divide the value (GROSS_RENT_VALUE) by the percentage represented by MA_INCOME_DETAIL.(column_name)_VA to. Example gross rent value = 10 MA_INCOME_DETAIL.BEDS_VA = 90 then (10 / 90%) = 11.11111

Business Rule

    • If MATHS or PCT_AMT are null then no operation is performed. (validate)

c) Process the Features

  • The income rental detail features are defined as all MA_TABLES records having a TABLE_TYPE = “incitem” AND INC_ITEM_CODE = “f”.

Business Rule

    • If MA_INCOME_DETAIL.(column)_CD is numeric then we move it to MA_INCOME_DETAIL.(column)_VA otherwise we set MA_INCOME_DETAIL.(column)_VA to NULL. (validate if new Expression applied to income features)

 

Step 6 – Summarize by Rental Type

Grouping income detail revenue by rental type (VB6 : pv_compute_income_detailActual, pv_compute_income_detailEconomic)(ApplyIncomeSubCategoryByRentalType)
Fields to compute based on rental type (room, food, telecom, dept, other) defined in MA_PARM_INC_SUBCAT (RENTAL_TYPE)

  • MA_INCOME.(rental type)_RENT_PCT=sum of all MA_INCOME_DETAIL.GROSS_RENT_PCT
  • MA_INCOME.(rental type)_RENT_UN=sum of all MA_INCOME_DETAIL.RENT_NET_UNITS
  • MA_INCOME.(rental type)_RENT_VAL=sum of all MA_INCOME_DETAIL.GROSS_RENT_VALUE
  • MA_INCOME.(rental type)_RENT_RATE =sum of all MA_INCOME_DETAIL.GROSS_RENT_RATE

 

Step 7 – Compute Income Gross Revenue

Set income revenue value (VB6 : pv_compute_income_detailActual, pv_compute_income_detailEconomic) (ApplyIncomeSubCategoryValuesToIncome)

  • MA_INCOME.GROSS_RENT_VALUE=sum of all MA_INCOME_DETAIL.GROSS_RENT_VALUE
  • MA_INCOME. RENT_UNITS= sum of MA_INCOME_DETAIL. RENT_UNITS (excluded other income)
  • MA_INCOME. RENT_NET_UNITS= sum of MA_INCOME_DETAIL. RENT_NET_UNITS (excluded other income and vacant without vacant rate)
  • MA_INCOME.GROSS_RENT_VALUE= sum of MA_INCOME_DETAIL.GROSS_RENT_ECO (excluded other income)
  • MA_INCOME.GROSS_RENT_RATE= MA_INCOME.GROSS_RENT_VALUE/ MA_INCOME. RENT_NET_UNITS
  • MA_INCOME.GROSS_RENT_PERCENT= MA_INCOME. RENT_NET_UNITS / MA_INCOME. RENT_UNITS*100
  • MA_INCOME.OTHER_INCOME=sum of MA_INCOME_DETAIL.GROSS_RENT_ECO if flagged as other income in sub category parameter.

The vacancy is populated from parameter for economic models, otherwise we take it from sum of vacancy from income detail.

  • MA_INCOME.VACANCY_VALUE= (MA_INCOME.GROSS_RENT_VALUE/ MA_INCOME.VACANCY_PCT)/100
  • MA_INCOME.VACANCY_UNIT= MA_INCOME.VACANCY_VALUE/ MA_INCOME.GROSS_RENT_RATE
  • MA_INCOME.VACANCY_UNIT=sum of MA_INCOME_DETAIL.RENT_NET_UNITS
  • MA_INCOME.VACANCY_VALUE=sum of MA_INCOME_DETAIL.GROSS_RENT_VALUE
  • MA_INCOME.VACANCY_PCT= (MA_INCOME.VACANCY_UNIT/ MA_INCOME.RENT_NET_UNITS)*100

The Short Fall adjustment is added. The short fall will occur after the calculation of vacancy. This adjustment is populated from parameter.

  • MA_INCOME_SHORTFALL_PCT=MA_PARM_INCOME.SHORTFALL_RATE_EXPRESSION (1, 2, 3, 4, 5)
  • MA_INCOME.SHORTFALL_VALUE = MA_INCOME_SHORTFALL_PCT * MA_INCOME.VACANCY_VALUE

 

Step 8 – Quality Adjustment

Set the value of the quality adjustment (Govern for Windows: pv_compute_quality_adj)(SetQualityAdjustment)
NOTE: Is Required
If you select the Is Required option for a code after the user has created property records, you must verify that a code is selected for those records. Otherwise, an error is raised and the compute fails.
The income quality is defined in MA_PARM_INCQUA records having a QUA_CODE = MA_INCOME.INCOME_QUALITY.

  • MA_INCOME.INC_QUALITY_VALUE = (GROSS_RENT_VALUE/100*evaluated from the expression in MA_PARM_INCQUA.PERCENTAGE_EXPRESSION)-GROSS_RENT_VALUE
  • MA_INCOME.INC_QUALITY_UNIT= INC_QUALITY_VALUE/GROSS_RENT_RATE
  • MA_INCOME.INC_QUALITY_PCT= INC_QUALITY_VALUE*100/GROSS_RENT_VALUE

Total adjustment = GROSS_RENT_VALUE + INC_QUALITY_VALUE

 

Step 9 – Compute Vacancy and Loss

(VB6 : pv_compute_vacancy_loss)(SetVacancyLossAdjustment)
If EXPENSE_BY=’p’ then

  • VACANCY_UNIT=RENT_NET_UNITS*VACANCY_PCT/100
  • VACANCY_VALUE=total adjustment* VACANCY_PCT/100

If EXPENSE_BY=’u’ then

  • VACANCY_VALUE= VACANCY_UNIT * GROSS_RENT_RATE
  • VACANCY_PCT= VACANCY_UNIT*100/RENT_NET_UNITS

Else

  • VACANCY_UNIT=VACANCY_VALUE/GROSS_RENT_RATE
  • VACANCY_PCT=VACANCY_UNIT*100/RENT_NET_UNITS

Step 10 – Compute the Effective Gross for Income Record

(VB6: pv_compute_effective_gross)(CalculateEffectiveGross)
The MA_INCOME.OTHER_INCOME is calculated only for economic models = GROSS_RENT_VALUE * other income percent/100

  • MA_INCOME.GROSS_EFFECTIVE=total adjustment – VACANCY_VALUE – SHORTFALL_VALUE + OTHER_INCOME

 

Step 11 – Compute economic values or expenses

(VB6: pv_compute_economic, pv_reset_expense) (CalculateExpenses) VALIDATE STEP
For departmental expenses:
If ROOM_EXP_PCT<>0 then

  • ROOM_EXP_UNIT= ROOM_EXP_PCT*ROOM_RENT_UN/100

If ROOM_EXP_UNIT<>0 AND ROOM_RENT_UN<>0 then

  • ROOM_EXP_PCT= ROOM_EXP_UNIT/ROOM_RENT_UN *100
  • ROOM_EXP_VALUE=ROOM_EXP_PCT*ROOM_RENT_VAL/100
  • Repeat the same calculation are based on ROOM expenses for all expenses below:
    • FOOD_EXP_UNIT, FOOD_EXP_PCT, FOOD_EXP_VALUE, TELECOM_EXP_UNIT, TELECOM_EXP_PCT, TELECOM_EXP_VALUE, DEPT_EXP_UNIT,
    • DEPT_EXP_PCT, DEPT_EXP_VALUE, OTHER_EXP_UNIT, OTHER_EXP_PCT, OTHER_EXP_VALUE

For undistributed expenses:
If FIXED_EXP_PCT <> then

  • FIXED_EXP_UNIT=FIXED_EXP_PCT*RENT_NET_UNITS/100

If FIXED_EXPENSE_UNIT <>0 AND RENT_NET_UNITS<>0 then

  • FIXED_EXP_PCT=FIXED_EXPENSE_UNIT/RENT_NET_UNITS*100
  • FIXED_EXP_VALUE=FIXED_EXP_PCT*GROSS_EFFECTIVE/100

If the option ‘Undistributed Expenses Calculation without Departmental Expenses’ is checked, the effective gross will be subtracted by all Departmental expenses values. (parm)

The product from that equation is then used to calculate the Undistributed Expenses.

  • Gross effective=GROSS_EFFECTIVE-(ROOM_EXP_VALUE+FOOD_EXP_VALUE+TELECOM_EXP_VALUE+DEPT_EXP_VALUE+ OTHER_EXP_VALUE)

For fixed expenses

  • FIXED_EXP_VALUE=FIXED_EXP_PCT*gross effective subtracted departmental expenses/100
  • Repeat the same calculation are based on FIXED expenses for all expenses below:
    • OPERATING_EX_UNIT, OPERATING_EX_PCT, OPERATING_EX_VALUE
    • REPLACE_EXP_UNIT, REPLACE_EXP_PCT, REPLACE_EXP_VALUE
    • MISC_EXP_UNIT, MISC_EXP_PCT, MISC_EXP_VALUE
    • TAXES_EXP_UNIT, TAXES_EXP_PCT, TAXES_EXP_VALUE

For FFE expenses

  • If FFE_EXP_PCT <> then
    • FFE_EXP_UNIT=FFE_EXP_PCT*ROOM_RENT_UN/100
  • If FFE_EXPENSE_UNIT <>0 AND ROOM_RENT_UN <>0 then
    • FFE_EXP_PCT=FFE_EXPENSE_UNIT/ ROOM_RENT_UN *100
  • FFE_EXP_VALUE=FFE_EXP_PCT*GROSS_EFFECTIVE/100

 

Step 12 – Compute Income Expenses

(VB6 : pv_compute_added_field).
We process all expenses (The income expenses are defined as all MA_TABLES records having a TABLE_TYPE = “incexp”)

1) If MA_INCOME.(column)_EB”) (expense_by)=’p’ then

  • For expenses=room, food, telecom, dept and other:
    • MA_INCOME.(column)_VL = MA_INCOME.(column)_PC* MA_INCOME.(MA_PARM_INCOME.INCOME_APPLY_TO = apply to)_RENT_VAL (MA_PARM_INCOME.INCOME_APPLY_TO =droom, dfood, dtelecom, ddept, dother excepted the first character, apply to=room, food, telecom, dept, other)

If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL /
  • MA_INCOME.(apply to)_RENT_UN

Else

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_PC *
  • MA_INCOME.(apply to)_RENT_UN /100

If the option ‘Undistributed Expenses Calculation without Departmental Expenses’ is checked,
The effective gross will be subtracted by all Departmental expenses values. The product from that equation is then used to calculate the Undistributed Expenses.

  • Gross effective=GROSS_EFFECTIVE-(ROOM_EXP_VALUE+ FOOD_EXP_VALUE+ TELECOM_EXP_VALUE+ DEPT_EXP_VALUE+ OTHER_EXP_VALUE)

For other expenses (Undistributed expenses and furniture/fixture/equipment)
MA_INCOME.(column)_VL = MA_INCOME.(column)_PC * Gross Effective / 100
If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL / MA_INCOME.RENT_NET_UNITS

Else

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_PC *
  • MA_INCOME.RENT_NET_UNITS / 100

2) If MA_INCOME.(column)_EB”) (expense_by)=’u’ then
For expenses=room, food, telecom, dept and other:
If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_VL = MA_INCOME.(column)_UN *
  • MA_INCOME.(apply to “_RENT_UN”)
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_UN * 100 /
  • MA_INCOME.(apply to & “_RENT_UN”)

Else

  • MA_INCOME.(column)_VL = MA_INCOME.(column)_UN *
  • MA_INCOME.(apply to & “_RENT_RATE”)
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_UN * 100 /
  • MA_INCOME.(apply to & “_RENT_UN)

For Undistributed Expenses
If the option ‘Undistributed Expenses Calculation without Departmental Expenses’ is checked, the effective gross will be subtracted by all Departmental expenses values. The product from that equation is then used to calculate the Undistributed Expenses.

  • Gross effective=GROSS_EFFECTIVE-(ROOM_EXP_VALUE+ FOOD_EXP_VALUE+ TELECOM_EXP_VALUE+ DEPT_EXP_VALUE+ OTHER_EXP_VALUE)

For other expenses,
If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_VL = MA_INCOME.(column)_UN * MA_INCOME.RENT_NET_UNITS
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_VL * 100 / Gross Effective

else

  • MA_INCOME.(column)_VL = MA_INCOME.(column)_UN *
  • MA_INCOME.GROSS_RENT_RATE
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_UN * 100 /
  • MA_INCOME.RENT_NET_UNITS

3) If MA_INCOME.(column)_EB”) (expense_by)=’g’ then
For expenses=room, food, telecom, dept and other:
If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL /
  • MA_INCOME.(apply to & “_RENT_UN”)
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_VL * 100 /
  • MA_INCOME.(apply to & “_RENT_VAL)

Else

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL /
  • MA_INCOME.(apply to & “_RENT_RATE)
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_VL * 100 /
  • MA_INCOME.(apply to & “_RENT_VAL)

For other expenses,
If option ‘Rate Unite in Income Expense’ is ‘Yes’ then

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL / MA_INCOME.RENT_NET_UNITS
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_VL * 100 / Gross Effective

else

  • MA_INCOME.(column)_UN = MA_INCOME.(column)_VL / MA_INCOME.GROSS_RENT_RATE
  • MA_INCOME.(column)_PC = MA_INCOME.(column)_VL * 100 / Gross Effective

If income model is Actual then
For each type of MA_PARM_INCOME.INCOME_APPLY_TO (droom, dfood, dtelecom, ddept, dother, fix, ope, rep, misc, tax, ffe):

droom: MA_INCOME.ROOM_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.ROOM_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.ROOM_EXP_VALUE = SUM of MA_INCOME.(column)_VL

dfood: MA_INCOME.FOOD_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.FOOD_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.FOOD_EXP_VALUE = SUM of MA_INCOME.(column)_VL

dtelecom: MA_INCOME.TELECOM_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.TELECOM_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.TELECOM_EXP_VALUE = SUM of MA_INCOME.(column)_VL

ddept: MA_INCOME.DEPT_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.DEPT_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.DEPT_EXP_VALUE = SUM of MA_INCOME.(column)_VL

dother: MA_INCOME.OTHER_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.OTHER_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.OTHER_EXP_VALUE = SUM of MA_INCOME.(column)_VL

fix: MA_INCOME.FIXED_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.FIXED_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.FIXED_EXP_VALUE = SUM of MA_INCOME.(column)_VL

ope: MA_INCOME.OPERATING_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.OPERATING_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.OPERATING_EXP_VALUE = SUM of MA_INCOME.(column)_VL

rep: MA_INCOME.REPLACE_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.REPLACE_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.REPLACE_EXP_VALUE = SUM of MA_INCOME.(column)_VL

misc: MA_INCOME.MISC_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.MISC_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.MISC_EXP_VALUE = SUM of MA_INCOME.(column)_VL

tax: MA_INCOME.TAXES_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.TAXES_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.TAXES_EXP_VALUE = SUM of MA_INCOME.(column)_VL

ffe: MA_INCOME.FFE_EXP_PCT= SUM of MA_INCOME.(column)_PC
MA_INCOME.FFE_EXP_UNIT = SUM of MA_INCOME.(column)_UN
MA_INCOME.FFE_EXP_VALUE = SUM of MA_INCOME.(column)_VL

 

Step 13 – Compute the Total Gross and Net By Percent

(VB6 : pv_compute_exp_to_net) (CalculateTotalValue)

  • total expense percent = (ROOM_EXP_PCT+FOOD_EXP_PCT+TELECOM_EXP_PCT+DEPT_EXP_PCT+OTHER_EXP_PCT+FFE_EXP_PCT+FIXED_EXP_PCT+OPERATING_EX_PCT+REPLACE_EXP_PCT+ MISC_EXP_PCT+TAXES_EXP_PCT)
  • total expense unit = (ROOM_EXP_UNIT+FOOD_EXP_UNIT+TELECOM_EXP_UNIT+DEPT_EXP_UNIT+OTHER_EXP_UNIT+FFE_EXP_UNIT+FIXED_EXP_UNIT+OPERATING_EX_UNIT+REPLACE_EXP_UNIT+ MISC_EXP_UNIT+TAXES_EXP_UNIT)
  • total expense value = (ROOM_EXP_VALUE+FOOD_EXP_VALUE+TELECOM_EXP_VALUE+DEPT_EXP_VALUE+OTHER_EXP_VALUE+FFE_EXP_VALUE+FIXED_EXP_VALUE+OPERATING_EX_VALUE+REPLACE_EXP_VALUE+ MISC_EXP_VALUE+TAXES_EXP_VALUE) rounded with no decimal, or take override value
    • total expense value = (ROOM_EXP_VA_OV+FOOD_EXP_VA_OV+TELECOM_EXP_VA_OV+DEPT_EXP_VA_OV+OTHER_EXP_VA_OV+FFE_EXP_VA_OV+FIXED_EXP_VA_OV+OPERATING_EX_VA_OV+REPLACE_EXP_VA_OV+ MISC_EXP_VA_OV+TAXES_EXP_VA_OV)

MA_INCOME.NET_PCT = 100 – total expense percent
MA_INCOME.OVERALL_ADJ_PCT = total expense percent

MA_INCOME.NET_UNIT = MA_INCOME.RENT_NET_UNITS – total expense unit
MA_INCOME.OVERALL_ADJ_UNIT = total expense unit

MA_INCOME.OVERALL_ADJ_VALUE = total expense value

MA_INCOME.NET_VALUE = MA_INCOME.GROSS_EFFECTIVE – MA_INCOME.OVERALL_ADJ_VALUE+ MA_INCOME.FINAL_ADJ

 

Step 14 – Compute the Site Adjustment for this Record

(Govern for Windows: pv_compute_site) (ApplySiteAdjustment)
Site adjustment is based on the value of MA_INCOME.SITE_NO
Note: Is Required
If you select the Is Required option for a code after the user has created property records, you must verify that a code is selected for those records. Otherwise, an error is raised and the compute fails.
The income quality is defined in MA_PARM_INCQUA records having a QUA_CODE = MA_INCOME.INCOME_QUALITY.

The adjustment (MA_INCOME.SITE_ADJ_VALUE) is calculated as
(MA_INCOME.NET_VALUE * MA_SITE.ADJ_INC_PERCENT / 100) + MA_SITE.ADJ_INC_AMOUNT

MA_INCOME.SITE_ADJ_UNIT is calculated as MA_INCOME.SITE_ADJ_VALUE
MA_INCOME.GROSS_RENT_RATE

MA_INCOME.SITE_ADJ_PCT is calculated as MA_INCOME.SITE_ADJ_VALUE
MA_INCOME.GROSS_RENT_VALUE * 100

The site adjustment (MA_INCOME.SITE_ADJ_VALUE) is added to the MA_INCOME.NET_VALUE.

 

Step 15 – Compute DIR and GRM Value

(VB6 : pv_compute_dir_grm) (CalculateGrmDirValues)

MA_INCOME.INCOME_DIR = (MA_INCOME.NET_VALUE + MA_INCOME.SITE_ADJ_VALUE) * 100
MA_INCOME.DIR_RATE

MA_INCOME.INCOME_GRM = (MA_INCOME.GROSS_EFFECTIVE + MA_INCOME.SITE_ADJ_VALUE) *
MA_INCOME.GRM_RATE

MA_INCOME.INCOME_DIR and MA_INCOME.INCOME_GRM could not be a negative amount. If so, it must be equal to 0

 

Step 16 – Compute net dir and grm (apply overall adjustment)

(VB6 : pv_compute_overall_adj) (ApplyOverallAdjsutment)
The overall adjustment is defined in MA_TABLES record having a TABLE_TYPE = “incadj”.
If no record found then

  • MA_INCOME.NET_DIR = MA_INCOME.INCOME_DIR
  • MA_INCOME.NET_GRM = MA_INCOME.INCOME_GRM

Else
The adjustment factoris an evaluated expression, if not defined, set to 100

  • MA_INCOME.NET_DIR = MA_INCOME.INCOME_DIR / 100 * adjustment factor
  • MA_INCOME.NET_GRM = MA_INCOME.INCOME_GRM / 100 * adjustment factor

If MA_INCOME.NB_UNITS (multiplier) > 1 then

  • MA_INCOME.NET_DIR = MA_INCOME.NET_DIR * multiplier
  • MA_INCOME.NET_GRM = MA_INCOME.NET_DIR * multiplier

 

Step 17 – Compute final dir and grm (apply final adjustment)

(VB6 : pv_round_dir_grm).
The final adjustment is calculated only if MA_INCOME.FINAL_ADJ_GRM_PCT is not NULL.[1] MA_INCOME.FINAL_GRM_ADJ = MA_INCOME.NET_GRM * MA_INCOME.FINAL_ADJ_GRM_PCT / 100
MA_INCOME.NET_GRM = MA_INCOME.NET_GRM + MA_INCOME.FINAL_ADJ_GRM

The final adjustment is calculated only if MA_INCOME.FINAL_ADJ_DIR_PCT is not NULL.[2] MA_INCOME.FINAL_DIR_ADJ = MA_INCOME.NET_DIR * MA_INCOME.FINAL_ADJ_DIR_PCT / 100
MA_INCOME.NET_DIR = MA_INCOME.NET_DIR + MA_INCOME.FINAL_ADJ_DIR

[1] A value of zero reset both the final_adj and final_adj_percent to NULL
[2] A value of zero reset both the final_adj and final_adj_percent to NULL

 

Step 18 – Final values rounding

(VB6 : pv_round_dir_grm) (RoundFinalValues)

MA_INCOME.NET_DIR, MA_INCOME_NET_GRM are rounded based on the MA_PARM_MAROUND information (code = ‘inc’).
For example, if the rounding value is 1000, and the net value is 45678 then the value is 46000. If the rounding value was 100 then it would have been 45700.

 

Step 19 – Set the modif stamp

Sets the modif stamp for the computed record (VB6 : compute_income).

We set MA_INCOME.MODIF_STAMP = MA_MODIF_STAMP.INC_STAMP if not null, otherwise we use the current date/time.

 

 

101-ma-compute-INCOME

 

0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this.
Loading...