MA – Audit Information

CAMA Audit Information

Overview

The CAMA Audit Information form is used for maintaining information about the mass appraisal audits associated with each property. This information includes the status of the audit, which can be either Pending or Finalized. A reason code can be associated with the audit. Details about the site visit, such as the appraiser’s name, dates, source codes and activity codes, as well as notes and comments can be tracked from this form. The Audit Information record can be transferred directly to the Govern Tax module.

When you save a CAMA Audit Record with the Value Finalized option selected, the historical data for the record are frozen.

Audit Information records can be created manually or generated automatically by the following batch processes:

  • MA Audit Pending: Run the MA Audit Pending batch process to generate a new Mass Appraisal Audit Information records with the Status set to Pending and the Frozen ID to 0. For details, see MA Audit Pending batch process.
  • MA Audit Finalized: Run the MA Audit Finalized batch process to generate Finalized Mass Appraisal Audit Information records from records with the Status set to Finalized. This batch process generates a Frozen ID for each audit, starting at -2 for the first. If a second audit is finalized, it is assigned Frozen ID -3, the third is assigned Frozen ID -4, and so on. Finalized records cannot be modified, except by authorized users. For details, see MA Audit Finalized batch process.

The Audit Information form contains new fields: Status and Reason Code.

Documentation

To view this information in pdf format, click on the following link

Accessing the Audit Information Form

To access the CAMA Audit Information form:

  1. Launch Govern.
  2. Open a Profile that contains the CAMA Audit Information form.
  3. Select Audit Information in the Forms Explorer.
  4. Perform a search to retrieve the required property record.
  5. Load the record to the form.

Audit Information Icons

New
Click the New icon to create a new Audit Information record for the property.
Save
Click the Save icon to save a new record or any modifications to an existing one. Data are saved to MA_AUDIT_INFO.
Delete
Click the Delete icon to remove the Property Information record from the database. A confirmation message appears. Click Yes to continue.
Browse
If multiple Frozen IDs exist for the record, click the Browse icon. You can then view and or select a copy of the record saved under a Frozen ID from the Browser Audit Information screen.
Transfer to Tax
Select the Transfer to Tax icon to transfer the active record directly to the TX_RE_ ASSESSMENT table in the Govern Real Property Tax module.
When you transfer the audit information to tax, the following fields are populated on the Tax Assessment Maintenance form and in the Govern database.

Govern OpenForms User Form and Fields Govern Database Table and Column
Form Real Estate Tax Assessment Maintenance form Table TX_RE_ ASSESSMENT table
Field Land Value Column VA_LAND_ VALUE
Field Improvement Value Column VA_IMPROVEMENT
Field Total Assessment Column VA_TOTAL_ASSMT

A confirmation message is displayed when you click the icon. Click OK to continue.

Audit Information Data Entry Fields

Value Finalized
Select the Value Finalized option and click Save when the audit is complete. Once a Value Finalized record is saved, all fields are read-only and cannot be modified, except by authorized users.A new Frozen ID is generated and applied to all the CAMA records for the property. These records can be viewed, at any time, by selecting the applicable Frozen ID in the History panel.
The MA Audit Finalized batch process automatically generates MA Audit Information records. On these records, the Value Finalized option is selected. Records are generated from MA Audit Information records with the Status set to Finalized.
Status
The Status combo box contains two items Pending and Finalized.
The MA Audit Pending batch process creates new MA Audit Information records with the Status set to Pending. An appraiser can set the Status to Finalized when the audit is complete. The MA Audit Finalized batch process generates finalized audit records and automatically selects the Value Finalized option.
Fiscal Year
By default, this field displays the fiscal year of the department. This year is also displayed on the Govern Toolbar.
Frozen ID
This field displays the frozen ID of the selected record. When the record is current, the Frozen ID is set to zero (0). When a finalized audit record is created for the property, the Frozen ID is set to -2 for the first, -3 for the second, -4 for the third, and so on.
Site Number
Select a Site Number from the drop-down list.
Audit Reason
Select a reason code to explain the reason for the audit (Table: VT_USER.MA_AUDIT_REASON).
Entry Date
Enter the date the information was recorded.
Appraiser
Select an appraiser’s name from the drop-down list.
Entry Code
Select the entry code from the drop-down list (Table: VT_USR_ MAENTRY).
Activity Code
Select the activity code from the drop-down list (Table: VT_ USR_MAACTV).
Source Code
Select the source code from the drop-down list (Table: VT_ USR_MAINFSRC).
Notes & Comments
This field provides space for notes and comments.

 

 

101-ma-frm-019

 

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...

 

101-ma-frm-020

CAMA Miscellaneous (detached) Structures

Overview

The Govern CAMA Miscellaneous Structures form is used for determining the appraised value of the miscellaneous structures associated with a property record.
The term miscellaneous structures, or out buildings, refers to structures that are separate from the main buildings. This includes fences, gazebos, garages, and swimming pools. You can create codes for specific structures, such as the type of fence: chain link fence, picket fence, or post and rail fence; or type of swimming pool, above ground, above ground, vinyl-sided, wood and vinyl, or steel and vinyl.

The appraised value is based on the type and size of the structure. This can be modified by the grade and condition. Depreciation can be applied,
according to the number of years and observed condition. Then, you can apply multiple adjustments, as required based on the site; neighborhood;
physical, functional, economical state; the percentage that the structure is complete; overall adjustments, If required, you can override the total value.

The administrative setup for Miscellaneous Structures consists of creating the validation tables and codes for the Miscellaneous Structures user form in Govern.

Mass Appraisal General Administrative Setup

Before beginning the Miscellaneous Structures setup, complete the general administrative setup for Mass Appraisal. This is described in the Govern CAMA General Information guide. It comprises the following administrative forms, tables, and codes:

  • Mass Appraisal General Parameters:
    • Additional configuration if you are using Marshall & Swift
  • Mass Appraisal Validation Tables for All Modules
    • Depreciation
    • Correlated Values Distribution
    • Neighborhood
    • Rounding table:
      You can set up validation codes for rounding on Miscellaneous Structures Values
    • Site
    • Limited Assessment Validation Table
  • Mass Appraisal Forms
    • Security Setup for Mass Appraisal
    • Appraiser’s Name
    • Appraisal Report Fields
    • Multiple Assessment Rate

Mass Appraisal Validation Tables for Miscellaneous Structures Data

The following Mass Appraisal Validation Tables are used for miscellaneous structure data:

Miscellaneous Structures Codes

The Miscellaneous Structures Codes table (VT_USR_MISCUSE) defines the specific type of miscellaneous structure, such as chain link fence, picket fence, or post and rail fence. The initial appraised value is set on this form. A Depreciation Table is selected for the form. See Miscellaneous Structure Use Code Validation Table and Codes.

Miscellaneous Structures Condition

The Miscellaneous Structures Condition Mass Appraisal Validation Table (VT_USR_MISCGRAD) and codes are applied to the depreciation of the structure in order to increase or decrease the percentage of depreciation according to the state of the structure. See Miscellaneous Structures Grade Validation Table and Codes on page 19.

Miscellaneous Structures Grade

The Miscellaneous Structures Grade Validation Table (VT_USR_MISCCOND) and codes are applied to the Replacement Cost New (RCN) of the miscellaneous structure in order to increase or decrease the appraised value
based on quality or grade. See Miscellaneous Structure Condition Validation Table and Codes on page 25.

Miscellaneous Structures Adjustments

The Miscellaneous Structures Adjustments Validation Table (VT_USR_MISCADJT) and Codes are applied to the appraised value of the miscellaneous structure after the neighborhood and site adjustment are added
but before rounding is applied and before the Final Adjustment is calculated. See Miscellaneous Structure Adjustments Validation Table and Codes on
page 31.

All the Miscellaneous Structures validation tables are unique; i.e., there can be only one of each in the database. If you try to create a second, an error message appears, indicating that there is a duplicate key, and you are unable to continue. However, you can create as many codes as required.

Prerequisites for Miscellaneous Structures

The following user validation tables are used in the Mass Appraisal Validation Tables for Miscellaneous Structures:

  • Jurisdictions (VT_USR_JURISD)
  • Neighborhood (VT_USR_NHBD)
  • Property Type (VT_USR_PROPTYPE)
  • CAMA Permanent Adjustment Reasons (VT_USR_AREATYPE)

User Validation Tables are set up in Govern Admin in the Validation Table Header form.

Jurisdictions

You can set up validation codes in order to apply different codes and rates
based on the geographic jurisdictions defined by your state or municipality.
The jurisdictions are entered in the VT_USR_JURISD validation table. They
can be applied to the following Mass Appraisal Miscellaneous Structures
Validation Tables:

  • Mass Appraisal Misc Structure Codes Validation Table
  • Mass Appraisal Misc Structure Condition Validation Table
  • Mass Appraisal Misc Structure Grade Validation Table
  • Mass Appraisal Misc Structure Adjustments Validation Table

Follow these steps to apply validation codes to a jurisdiction:

1. Select Support of Multiple Jurisdictions on the System Registry Maintenance form.
2. Create jurisdictions in the VT_USR_JURISD user validation table.
3. Select the Apply by Jurisdiction on the Mass Appraisal Validation Table.
4. Select the jurisdiction from the Jurisdiction drop-down list on the Mass Appraisal Validation Codes form.

Neighborhoods

Neighborhoods are defined by the organization in the Neighborhood User Validation Table, VT_USR_NBHD validation table. They can be applied to the following Mass Appraisal Miscellaneous Structures Validation Tables in order to apply different codes and rates based on neighborhood:

  • Mass Appraisal Misc Structure Codes Validation Table
  • Mass Appraisal Misc Structure Condition Validation Table
  • Mass Appraisal Misc Structure Grade Validation Table
  • Mass Appraisal Misc Structure Adjustments Validation Table

To apply validation codes by neighborhood:
1. Create neighborhoods in the VT_USR_NBHD user validation table.
2. Select the Neighborhood Lookup on the Mass Appraisal Validation Table.
3. Select the neighborhood from the Neighborhood drop-down list on the Mass Appraisal Validation Codes form.

NOTE: The VT_USR_NBHD Table is populated by the Mass Appraisal Neighborhood Validation Table. The Mass Appraisal Validation Table is also used for defining codes and characteristics for the table. Refer to the Govern CAMA General Information guide for details.

The Neighborhood Adjustment for Miscellaneous Structures is defined in the Mass Appraisal Neighborhood Validation Table. It can be applied to the Neighborhood as a percentage, formula, or logical expression. For further details, refer to the Govern CAMA General Information guide.

Property Type

Property Types are created in the VT_USR_PROPTYPE user validation table. They can be applied to the Mass Appraisal Miscellaneous Structures Code
Validation Table.

To apply validation codes by property type:

1. Create property types in the VT_USR_PROPTYPE user validation table.
2. Select the property type from the Property Type drop-down list on the Mass Appraisal Validation Codes form.

Permanent Adjustment Reasons

You can set up permanent adjustment reason codes to include additional information about the miscellaneous structures on the MA – Miscellaneous Structures form.
For these codes, you need to create a user validation table in Govern Admin or in GNA. Refer to the Super User guide for details about Govern Admin or to the Govern New Administration documentation for details about GNA.

NOTE: The user validation tables and codes you create in the Validation Table Header form in Govern Admin are copied to the User Validation Table Editor in GNA. However, the reverse does not apply; i.e., the tables
and codes you create in GNA are not copied to Govern Admin.

The Permanent Adjustment Reason codes are available for the MA – Miscellaneous Structures form in Govern, regardless of where they are created. They are not available in Govern for Windows.

To set up permanent adjustment reason codes:
1. Create a user validation table with the table name PERMADJREASON in either Govern Admin or GNA.
2. Create codes for this table.

If you want to give the table a different name, follow these steps:

1. Launch the Govern Business Entity Designer (BED).
2. Select Business Entities.
3. Select the MA_MiscStructures business entity.
4. Select the PERM_ADJ_REASON attribute.
5. Change the table name under the Properties > Lookup Settings.
6. Click Save.
Refer to the Govern Business Entity Designer guide located on the Business Entity Designer page for further details.

General Mass Appraisal Validation Tables

The following Mass Appraisal Validation Tables are used in calculating Miscellaneous Structures values as well as other appraised values. These tables are described in the Govern CAMA General Information guide.

Depreciation Tables

Depreciation is applied to miscellaneous structures according to the age and the condition of the structure. It is based on a rate or schedule defined in the Mass Appraisal Depreciation Validation Tables and Codes (MA_PARAM_DEPR and VT_USR_<table_name>, where table_name refers to the user-defined name of the depreciation table). A Depreciation Table is associated with each miscellaneous structure type through the Miscellaneous Use Code Validation Table (VT_USR_MUSE).

Site Information

Site adjustments are set up in the Mass Appraisal Site validation table (MA_SITE). Multiple site adjustments for miscellaneous structures can be added to the record on the Mass Appraisal Site Information form in Govern. The total of these adjustments is added to the appraised value of the miscellaneous structure before the overall and final adjustments are calculated.

Rounding Table

Rounding can be defined for miscellaneous structures on the Mass Appraisal Rounding Table (MA_PARAM_MAROUND). It is applied to the appraised value of the structure after the Overall Adjustment is applied but before the Final Adjustment is added.

The Replacement Cost New (RCN) and Replacement Cost New Less Depreciation (RCNLD) values are not rounded.

Related Topics

 

 

101-ma-frm-020

 

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...

MA – Story Case #10 (Matrix and Area Look-Up)

CAMA BSE Setup STORY CASE #10 (Matrix and Area Look-Up)

[In Development]

Overview

This story case uses the matrix setup with area look-up to create a 5 dimension look-up table.
These attributes are used to determine the base rate (dollars per square foot) and uses multiplier adjustments based on these attributes (1.02, 0.97).

Premise

The residential cost method starts by using five attributes: Quality, Story Type, Heating Type, Framing and Area.

 

 

101-ma-frm-025-Story-010

 

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...

MA – Global Property Computation

Mass Appraisal Global Property Computation

Purpose

The purpose of the Global Computation is to provide values for all Govern system columns for a given record of the table MA_MASTER and given records of table MA_SITE.
The ultimate goal of this compute is to provide property values for all the CAMA components of a property (Land, Misc., Cost of Buildings, Income, MRA…).
Values are sub totaled by site number (MA_SITE) and then added up in the MA_MASTER record of each parcel.

Important Notes RE: 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

Parameters

The following System Registry Parameters are used in the computation and are year based.
Section Name ‘Mass Appraisal’

  • TRANS_TO_TAX = “Mass Appraisal”, “Automatically Transfer To Tax” = (‘yes’ or ‘no’)
  • USE_PP = “Mass Appraisal”, “PP Assessment Data” = (‘yes’ or ‘no’)
  • CALC_INC_DEC = “Mass Appraisal”, “Include Increase / Decrease In Compute” = (‘yes’ or ‘no’)
  • USE_EXEMPTIONS = “Mass Appraisal”, “Use Exemptions” = (‘yes’ or ‘no’)
  • MULTIPLE_APP = “Mass Appraisal”, “multiple appraisal” = (‘yes’ or ‘no’)
  • ASSMT_RATE = Registry by year -“Assessment Equalization Rate”, default is 100. (Custom for the state of PA)
  • MIN_APPR = Registry by year -“Minimum Appraised Value”, default 0

The following parameters are no longer used (deprecated)

  • “Mass Appraisal”, “Force Compute All Bldg Seq.” = (‘yes’ or ‘no’)

General Parameters

  • MA_PARM_MAROUND.ROUNDING_CODE = “appval”
  • MA_PARM_MULTDIST
  • TX_PARM_EXEMPT

 

Tables Used (Available for the expressions)

The following tables are used in the computation and their attributes can be included in the expressions.
Tables updated by the process:

  • MA_LK_EXEMPTIONS
  • MA_MASTER
  • MA_SITE
  • TX_RE_ASSESSMENT
  • TX_EXEMPTIONS

Tables used for read only:

  • MA_BUILDINGS
  • MA_INCOME
  • MA_LAND
  • MA_LINKS_PERCENT
  • MA_MISC_STRUCTURES
  • MA_MRA
  • MA_OVERRIDE
  • PP_ASSESSMENT (See Roadmap)

Step 1 – Prepare and Initialize Data

For this step we read MA_MASTER and we load all MA_SITE records into an array or collection and we reset all computed columns to zero. In all subsequent steps, it is assume that when we compute a value for a MA_SITE column that we perform the operation in memory and then we save all MA_SITES records only once in a subsequent step. Note: If MA_MASTER.HISTORY_ONLY = -1 we do not compute when called from a batch compute. We ignore this column setting when called after a record saved.

We save the current appraised value into a variable (prior appraised value) to be used in step 13.
Every columns updated by this process need to be recorded in the audit trail. (to be validated)

The following columns are set to 0 in both MA_MASTER and MA_SITE:

  • LAND_VALUE
  • LAND_AG_VALUE
  • MISC_VALUE
  • BLDG_VALUE
  • INC_GRM_VALUE
  • INC_DIR_VALUE
  • MRA_VALUE
  • PP_VALUE
  • CAMA_VALUE
  • TOTAL_VALUE (MA_SITE ONLY)
  • APPRAISED_VALUE (MA_MASTER ONLY)
  • LK_LAND_VALUE
  • LK_LAND_AG_VALUE
  • LK_MISC_VALUE
  • LK_BLDG_VALUE
  • LK_INC_GRM_VALUE
  • LK_INC_DIR_VALUE
  • LK_MRA_VALUE
  • LK_COMP_VALUE (MA_MASTER ONLY)
  • PP_LK_VALUE
  • INCOME_LAND_AMT
  • MRA_LAND_AMT
  • INCOME_BLDG_AMT
  • MRA_BLDG_AMT
  • INCOME_MISC_AMT
  • MRA_MISC_AMT

We load all MA_INCOME records into an array or collection and we reset the columns listed below to zero. In all subsequent steps, it is assume that when we update a value for a MA_INCOME column that we perform the operation in memory and then we save all MA_INCOME records only once in a subsequent step.

  • LAND_VALUE
  • BLDG_VALUE
  • MISC_VALUE

We load all MA_MRA records into an array or collection and we reset the columns listed below to zero. In all subsequent steps, it is assume that when we update a value for a MA_MRA column that we perform the operation in memory and then we save all MA_MRA records only once in a subsequent step.

  • LAND_VALUE
  • BLDG_VALUE
  • MISC_VALUE

 

Step 2 – Process the Land Records

In this step, we read all MA_LAND records and compute the MA_SITE totals based on the MA_LAND.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE.LAND_VALUE = sum of MA_LAND.TOTAL_VALUE or MA_LAND. TOTAL_VALUE_OVERRIDE if MA_LAND.OVERRIDE = -1.
  • MA_SITE.LAND_AG_VALUE = sum of MA_LAND.TOTAL_VALUE_AG or MA_LAND. TOTAL_VALUE_AG_OVERRIDE if MA_LAND.AG_OVERRIDE = -1.
  • If MA_LAND.INC_INCOME = -1 then ADD MA_LAND.TOTAL_VALUE or MA_LAND.TOTAL_VALUE_OVERRIDE if MA_LAND.OVERRIDE = -1 to MA_INCOME.LAND_VALUE where MA_INCOME.INCOME_ID = MA_LAND.INC_ID.
  • If MA_LAND.INC_MRA = -1 then ADD MA_LAND.TOTAL_VALUE or MA_LAND.TOTAL_VALUE_OVERRIDE if MA_LAND.OVERRIDE = -1 to MA_MRA.LAND_VALUE where MA_MRA.MRA_ID = MA_LAND.MRA_ID.

If USE_EXEMPTIONS = “yes” then

  • Read all ma_lk_exemptions records associated with each land records to compute the tax exemptions. ma_lk_exemptions.TABLE_TYPE = “land”, ma_lk_exemptions.KEY_ID = MA_LAND.LAND_ID, ma_lk_exemptions.P_ID = MA_LAND.P_ID, ma_lk_exemptions.YEAR_ID = MA_LAND.YEAR_ID, ma_lk_exemptions.FROZEN_ID = MA_LAND.FROZEN_ID, ma_lk_exemptions.KEY_SEQ = 0
  • For each ma_lk_exemptions record, calculate the allowed exemption ALLOWED_EX by using multiplying ma_lk_exemptions.PERCENTAGE (Use 100 if greater than 100 and update ma_lk_exemptions.PERCENTAGE accordingly) by the land value (MA_LAND.TOTAL_VALUE or MA_LAND. TOTAL_VALUE_OVERRIDE if MA_LAND.OVERRIDE = -1)
  • For each ma_lk_exemptions record, find TX_PARM_EXEMPT by using ma_lk_exemptions.EXEMPTION_NO to retrieve TX_PARM_EXEMPT. EXEMPTION_NO. If TX_PARM_EXEMPT.PCT_AMT = ‘a’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE else if TX_PARM_EXEMPT.PCT_AMT = ‘p’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE * ALLOWED_EX / 100 else PARM_EX = 0
  • If PARM_EX > ALLOWED_EX then PARM_EX = ALLOWED_EX.
  • If PARM_EX > TX_PARM_EXEMPT.LIMIT_AMOUNT then PARM_EX = TX_PARM_EXEMPT.LIMIT_AMOUNT.
  • Update ma_lk_exemptions, set ma_lk_exemptions.AMOUNT = PARM_EX, ma_lk_exemptions.LAST_MODIF_UID = current user, ma_lk_exemptions.LAST_MODIF_DATE = date & time.

 

Step 3 – Process the Building Records

In this step, we read all MA_BUILDINGS records and compute the MA_SITE total based on the MA_BUILDINGS.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE. BLDG_VALUE = sum of MA_BUILDINGS.TOTAL_VALUE or MA_BUILDINGS. TOTAL_VALUE_OVERRIDE if MA_BUILDINGS.OVERRIDE = -1.
  • If MA_BUILDINGS.INC_INCOME = -1 then ADD MA_BUILDINGS.TOTAL_VALUE or MA_BUILDINGS.TOTAL_VALUE_OVERRIDE if MA_BUILDINGS.OVERRIDE = -1 to MA_INCOME.BLDG_VALUE where MA_INCOME.INCOME_ID = MA_BUILDINGS.INC_ID.
  • If MA_BUILDINGS.INC_MRA = -1 then ADD MA_BUILDINGS.TOTAL_VALUE or MA_BUILDINGS.TOTAL_VALUE_OVERRIDE if MA_BUILDINGS.OVERRIDE = -1 to MA_MRA.BLDG_VALUE where MA_MRA.MRA_ID = MA_BUILDINGS.MRA_ID.

If USE_EXEMPTIONS = “yes” then

  • Read all ma_lk_exemptions records associated with each building records to compute the tax exemptions. ma_lk_exemptions.TABLE_TYPE = “bldg”, ma_lk_exemptions.KEY_ID = MA_BUILDINGS.BLDG_ID, ma_lk_exemptions.P_ID = MA_BUILDINGS.P_ID, ma_lk_exemptions.YEAR_ID = MA_BUILDINGS.YEAR_ID, ma_lk_exemptions.FROZEN_ID = MA_BUILDINGS.FROZEN_ID, ma_lk_exemptions.KEY_SEQ = MA_BUILDINGS.BLDG_SEQ
  • For each ma_lk_exemptions record, calculate the allowed exemption ALLOWED_EX by using multiplying ma_lk_exemptions.PERCENTAGE (Use 100 if greater than 100 and update ma_lk_exemptions.PERCENTAGE accordingly) by the building value (MA_BUILDINGS.TOTAL_VALUE or MA_BUILDINGS. TOTAL_VALUE_OVERRIDE if MA_BUILDINGS.OVERRIDE = -1)
  • For each ma_lk_exemptions record, find TX_PARM_EXEMPT by using ma_lk_exemptions.EXEMPTION_NO to retrieve TX_PARM_EXEMPT. EXEMPTION_NO. If TX_PARM_EXEMPT.PCT_AMT = ‘a’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE else if TX_PARM_EXEMPT.PCT_AMT = ‘p’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE * ALLOWED_EX / 100 else PARM_EX = 0
  • If PARM_EX > ALLOWED_EX then PARM_EX = ALLOWED_EX.
  • If PARM_EX > TX_PARM_EXEMPT.LIMIT_AMOUNT then PARM_EX = TX_PARM_EXEMPT.LIMIT_AMOUNT.
  • Update ma_lk_exemptions, set ma_lk_exemptions.AMOUNT = PARM_EX, ma_lk_exemptions.LAST_MODIF_UID = current user, ma_lk_exemptions.LAST_MODIF_DATE = date & time.

 

Step 4 – Process the Miscellaneous Structure Records

(see roadmap)
In this step we read all MA_MISC_STRUCTURES records and compute the MA_SITE total based on the MA_MISC_STRUCTURES.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE. MISC_VALUE = sum of MA_MISC_STRUCTURES.TOTAL_VALUE or MA_MISC_STRUCTURES. TOTAL_VALUE_OVERRIDE if MA_MISC_STRUCTURES.OVERRIDE = -1.
  • If MA_MISC_STRUCTURES.INC_INCOME = -1 then ADD MA_MISC_STRUCTURES.TOTAL_VALUE or MA_MISC_STRUCTURES.TOTAL_VALUE_OVERRIDE if MA_MISC_STRUCTURES.OVERRIDE = -1 to MA_INCOME.MISC_VALUE where MA_INCOME.INCOME_ID = MA_MISC_STRUCTURES.INC_ID.
  • If MA_MISC_STRUCTURES.INC_MRA = -1 then ADD MA_MISC_STRUCTURES.TOTAL_VALUE or MA_MISC_STRUCTURES.TOTAL_VALUE_OVERRIDE if MA_MISC_STRUCTURES.OVERRIDE = -1 to MA_MRA.MISC_VALUE where MA_MRA.MRA_ID = MA_MISC_STRUCTURES.MRA_ID.

If USE_EXEMPTIONS = “yes” then
Read all ma_lk_exemptions records associated with each building records to compute the tax exemptions. ma_lk_exemptions.TABLE_TYPE = “misc”, ma_lk_exemptions.KEY_ID = MA_MISC_STRUCTURES.MISC_ID, ma_lk_exemptions.P_ID = MA_MISC_STRUCTURES.P_ID, ma_lk_exemptions.YEAR_ID = MA_MISC_STRUCTURES.YEAR_ID, ma_lk_exemptions.FROZEN_ID = MA_MISC_STRUCTURES.FROZEN_ID, ma_lk_exemptions.KEY_SEQ = 0

  • For each ma_lk_exemptions record, calculate the allowed exemption ALLOWED_EX by using multiplying ma_lk_exemptions.PERCENTAGE (Use 100 if greater than 100 and update ma_lk_exemptions.PERCENTAGE accordingly) by the building value (MA_MISC_STRUCTURES.TOTAL_VALUE or MA_MISC_STRUCTURES. TOTAL_VALUE_OVERRIDE if MA_MISC_STRUCTURES.OVERRIDE = -1)

 

  • For each ma_lk_exemptions record, find TX_PARM_EXEMPT by using ma_lk_exemptions.EXEMPTION_NO to retrieve TX_PARM_EXEMPT. EXEMPTION_NO. If TX_PARM_EXEMPT.PCT_AMT = ‘a’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE else if TX_PARM_EXEMPT.PCT_AMT = ‘p’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE * ALLOWED_EX / 100 else PARM_EX = 0
  • If PARM_EX > ALLOWED_EX then PARM_EX = ALLOWED_EX.
  • If PARM_EX > TX_PARM_EXEMPT.LIMIT_AMOUNT then PARM_EX = TX_PARM_EXEMPT.LIMIT_AMOUNT.
  • Update ma_lk_exemptions, set ma_lk_exemptions.AMOUNT = PARM_EX, ma_lk_exemptions.LAST_MODIF_UID = current user, ma_lk_exemptions.LAST_MODIF_DATE = date & time.

Step 5 – Process the Income Records

In this step we read all MA_INCOME records (from the loaded array) and compute the MA_SITE totals based on the MA_INCOME.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE.INCOME_GRM_VALUE = [ sum of MA_INCOME.NET_GRM or MA_INCOME. NET_GRM_OVERRIDE if MA_INCOME.OVERRIDE_GRM = -1]
  • If MA_SITE.INCOME_GRM_VALUE <> 0 then
    • MA_SITE.INCOME_GRM_VALUE = MA_SITE.INCOME_GRM_VALUE +[ sum of MA_INCOME.LAND_VALUE or MA_INCOME.LAND_VALUE_OVERRIDE if MA_INCOME.LAND_OVERRIDE = -1] + [ sum of MA_INCOME.BLDG_VALUE or MA_INCOME.BLDG_VALUE_OVERRIDE if MA_INCOME.BLDG_OVERRIDE = -1] + [ sum of MA_INCOME.MISC_VALUE or MA_INCOME.MISC_VALUE_OVERRIDE if MA_INCOME.MISC_OVERRIDE = -1]
  • MA_SITE.INCOME_DIR_VALUE = [ sum of MA_INCOME.NET_DIR or MA_INCOME.NET_DIR_OVERRIDE if MA_INCOME.OVERRIDE_DIR = -1 ]
  • If MA_SITE.INCOME_DIR_VALUE <> 0 then
    • MA_SITE.INCOME_DIR_VALUE = MA_SITE.INCOME_DIR_VALUE + [ sum of MA_INCOME.LAND_VALUE or MA_INCOME.LAND_VALUE_OVERRIDE if MA_INCOME.LAND_OVERRIDE = -1] + [ sum of MA_INCOME.BLDG_VALUE or MA_INCOME.BLDG_VALUE_OVERRIDE if MA_INCOME.BLDG_OVERRIDE = -1] + [ sum of MA_INCOME.MISC_VALUE or MA_INCOME.MISC_VALUE_OVERRIDE if MA_INCOME.MISC_OVERRIDE = -1]

If USE_EXEMPTIONS = “yes” and ( MA_MASTER.METHOD_IN_USE = “3” or = “4” ) then

  • Read all ma_lk_exemptions records associated with each land records to compute the tax exemptions. ma_lk_exemptions.TABLE_TYPE = “inc”, ma_lk_exemptions.KEY_ID = MA_INCOME.INCOME_ID, ma_lk_exemptions.P_ID = MA_INCOME.P_ID, ma_lk_exemptions.YEAR_ID = MA_INCOME.YEAR_ID, ma_lk_exemptions.FROZEN_ID = MA_INCOME.FROZEN_ID, ma_lk_exemptions.KEY_SEQ = 0
  • IF MA_MASTER.METHOD_IN_USE = “3” then For each ma_lk_exemptions record, calculate the allowed exemption ALLOWED_EX by using multiplying ma_lk_exemptions.PERCENTAGE (Use 100 if greater than 100 and update ma_lk_exemptions.PERCENTAGE accordingly) by the income dir value (MA_ INCOME.NET_DIR or MA_INCOME.NET_DIR_OVERRIDE if MA_INCOME.OVERRIDE_DIR = -1)
  • IF MA_MASTER.METHOD_IN_USE = “4” then For each ma_lk_exemptions record, calculate the allowed exemption ALLOWED_EX by using multiplying ma_lk_exemptions.PERCENTAGE (Use 100 if greater than 100 and update ma_lk_exemptions.PERCENTAGE accordingly) by the income grm value (MA_ INCOME.NET_GRM or MA_INCOME.NET_GRM_OVERRIDE if MA_INCOME.OVERRIDE_GRM = -1)
  • For each ma_lk_exemptions record, find TX_PARM_EXEMPT by using ma_lk_exemptions.EXEMPTION_NO to retrieve TX_PARM_EXEMPT. EXEMPTION_NO. If TX_PARM_EXEMPT.PCT_AMT = ‘a’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE else if TX_PARM_EXEMPT.PCT_AMT = ‘p’ then PARM_EX = TX_PARM_EXEMPT.EXEMPT_VALUE * ALLOWED_EX / 100 else PARM_EX = 0
  • If PARM_EX > ALLOWED_EX then PARM_EX = ALLOWED_EX.
  • If PARM_EX > TX_PARM_EXEMPT.LIMIT_AMOUNT then PARM_EX = TX_PARM_EXEMPT.LIMIT_AMOUNT.
  • Update ma_lk_exemptions, set ma_lk_exemptions.AMOUNT = PARM_EX, ma_lk_exemptions.LAST_MODIF_UID = current user, ma_lk_exemptions.LAST_MODIF_DATE = date & time.

Save the Income array changes back to database.

Step 6 – Process the MRA Records

In this step we read all MA_MRA records (from the loaded array) and compute the MA_SITE total based on the MA_MRA.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE.MRA_VALUE = [ sum of MA_MRA.TOTAL_VALUE or MA_MRA.TOTAL_VALUE_OVERRIDE if MA_MRA.OVERRIDE = -1]
  • MA_SITE.MRA_VALUE = MA_SITE.MRA_VALUE + [ sum of MA_MRA.LAND_VALUE or MA_MRA.LAND_VALUE_OVERRIDE if MA_MRA.LAND_OVERRIDE = -1] + [ sum of MA_MRA.BLDG_VALUE or MA_MRA.BLDG_VALUE_OVERRIDE if MA_MRA.BLDG_OVERRIDE = -1] + [ sum of MA_MRA.MISC_VALUE or MA_MRA.MISC_VALUE_OVERRIDE if MA_MRA.MISC_OVERRIDE = -1]

Save the MRA array changes back to database.

Step 7 – Process Personal Property Records

In this step we Process the personal property records (VB6: pv_load_pp)

Perform this step only if USE_PP = “yes”
Read all PP_ASSESSMENT records and compute the MA_SITE total based on the PP_ASSESSMENT.SITE_NO = MA_SITE.SITE_NO.

  • MA_SITE.PP_VALUE = [ sum of PP_ASSESSMENT.VA_AP_TOTAL ]

 

Step 8 – Process the Linked Records

A parcel can receive values from other parcels or provide a portion of its value to others. Contrary to the VB6 version, we will only load the values provided by other parcels and it is assumed the parcels that are providing the values have been previously computed.
If possible, if the parcels to be loaded have a MA_MASTER.MODIF_STAMP set to NULL, we should be calling this compute (recursive call) for these parcels prior to complete this step. (to be verified)

IMPORTANT: A parcel cannot receive and provide a value at the same time. Parcels having the MA_MASTER.exclude_from_roll = <> 0 are providing values to other parcels and therefore we should not further perform this step.
However we need to reset the modif stamps to all linked parcels by performing the following SQL Query.

1. update ma_master set MODIF_STAMP =nullwhere year_id =(current parcel year id) and frozen_id =(current parcel frozen id) and p_id =(select malk.p_id from MA_LINKS_PERCENT malk, PC_PARCEL_LINKS lktype where malk.LINK_ID = lktype.LINK_ID and malk.P_ID = lktype.P_ID and year_id =(current parcel year id) and frozen_id =(current parcel frozen id) and MASTER_PID =-1 and malk.p_id <>(current parcel P_ID)andexists(select 0 from PC_PARCEL_LINKS pclk where pclk.LINK_ID = malk.LINK_ID and(MASTER_PID = 0 or master_PID isNULL)and P_ID =(current parcel P_ID)))

2. update ma_master set MODIF_STAMP =nullwhere year_id =(current parcel year id)and frozen_id =(current parcel frozen id) and p_id <>(current parcel P_ID)andexists(select 0 from MA_LINKS_PERCENT where p_id = ma_master.p_id and year_id = ma_master.year_id and frozen_id = ma_master.frozen_id and LINK_ID =(select link_id from PC_PARCEL_LINKS where MASTER_PID =-1 and p_id =(current parcel P_ID)))

MA_MASTER.exclude_from_roll = -1 – The parcel provides all types of values to other parcels

MA_MASTER.exclude_from_roll = 1 – The parcel provides only a land value to other parcels (to be validated)
MA_MASTER.exclude_from_roll = 2 – The parcel provides only a misc. and a building value to other parcels.

101-ma-compute-Global-UI-ParcelLinking2.png
Click on the image to enlarge

A merge occurs when several parcels are giving their values to a master parcel.
In the example above P_ID = 1 is the master parcel and P_ID = 2,3,4,5 are providing their full values to P_ID = 1. P_ID is included in the roll while the other P_ID’s are excluded.
The PERCENT_LINK on non-master parcels determine whether it is a merge or a split.
For a split, the PERCENT_LINK will contain a value from 1 to 100.
Section 1) below is for a merge and section 2) is for a split.

101-ma-compute-Global-UI-ParcelLinking2.png
Click on the image to enlarge

A split occurs when one parcel is giving its value to a group of parcels. In the example above P_ID = 1 is the master parcel and P_ID = 2,3,4,5 are receiving a portion of P_ID = 1 value. The exclude from roll value determines the type of value to be distributed (land, building, all).

The remaining section is for MA_MASTER.exclude_from_roll = 0 (or null).

Parcels Excluded from Role

1) We execute a query that returns all parcels excluded from the roll that contributes 100% of their values to the current parcel

  • select p_id, percent_of_total, value_on from MA_LINKS_PERCENT malk, PC_PARCEL_LK_TYPE lktype where malk.LINK_ID = lktype.LINK_ID and year_id =(current parcel year id) and frozen_id =(current parcel frozen id) and p_id <>(current parcel P_ID)andand malk.LINK_ID =(select link_id from PC_PARCEL_LINKS where MASTER_PID =-1 and P_ID =(current parcel P_ID))

For each record we load all MA_SITE records and we match the MA_SITE.SITE_DESC with the ones for the current parcel. If no MA_SITE records match the SITE_DESC we then create a new empty site, with a SITE_NO = max (site_no) +1 of the current_parcel and SITE_DESC = the site description from the read record.

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 1
    • then Current parcel MA_SITE. LK_LAND_VALUE = Current parcel MA_SITE.LK_LAND_VALUE + read link record MA_SITE.LAND_VALUE or MA_SITE.LAND_VALUE_OVERRIDE if MA_SITE.LAND_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 1
    • then Current parcel MA_SITE. LK_LAND_AG_VALUE = Current parcel MA_SITE.LK_LAND_AG_VALUE + read link record MA_SITE.LAND_AG_VALUE or MA_SITE.LAND_AG_VALUE_OVERRIDE if MA_SITE.LAND_AG_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 2
    • then Current parcel MA_SITE. LK_MISC_VALUE = Current parcel MA_SITE.LK_MISC_VALUE + read link record MA_SITE.MISC_VALUE or MA_SITE.MISC_VALUE_OVERRIDE if MA_SITE.MISC_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 2
    • then Current parcel MA_SITE. LK_BLDG_VALUE = Current parcel MA_SITE.LK_BLDG_VALUE + read link record MA_SITE.BLDG_VALUE or MA_SITE.BLDG_VALUE_OVERRIDE if MA_SITE.BLDG_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE.LK_INC_GRM_VALUE = Current parcel MA_SITE. LK_INC_GRM_VALUE + read link record MA_SITE.INCOME_GRM_VALUE or MA_SITE.INCOME_GRM_VALUE_OVERRIDE if MA_SITE.INC_GRM_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE.LK_INC_DIR_VALUE = Current parcel MA_SITE. LK_INC_DIR_VALUE + read link record MA_SITE.INCOME_DIR_VALUE or MA_SITE.INCOME_DIR_VALUE_OVERRIDE if MA_SITE.INC_DIR_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE.LK_MRA_VALUE = Current parcel MA_SITE.LK_MRA_VALUE + read link record MA_SITE.MRA_VALUE or MA_SITE.MRA_VALUE_OVERRIDE if MA_SITE.MRA_OVERRIDE = -1

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE.PP_LK_VALUE = Current parcel MA_SITE.PP_LK_VALUE + read link record MA_SITE.PP_VALUE or MA_SITE.PP_VALUE_OVERRIDE if MA_SITE.PP_OVERRIDE = -1

We also load the linked comparable sales value for MA_MASTER.

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_MASTER.LK_COMP_VALUE = read link record MA_MASTER.COMP_SALES_VALUE

 

Parcels Contributing a portion of their value

2) We execute a query that returns all parcels excluded from the roll that contributes for a portion of their values to the current parcel

  • select LINK_ID, percent_of_total from MA_LINKS_PERCENT where year_id =(current parcel year id) and frozen_id = (current parcel frozen id) and p_id = (current parcel P_ID) and percent_of_total isnotnull

For each record found we find all the site records for the parcel providing the value to be pro-rated by the value of percent_of_total.

  • select p_id, value_on from PC_PARCEL_LK_TYPE lktype , PC_PARCEL_LINKS pclk where pclk.LINK_ID = lktype.LINK_ID and MASTER_PID =-1 and lktype.LINK_ID = link id from the current record

We then load all MA_SITE records for the found record and we match the MA_SITE.SITE_DESC with the ones for the current parcel. If no MA_SITE records match the SITE_DESC we then create a new empty site, with a SITE_NO = max (site_no) +1 of the current_parcel and SITE_DESC = the site description from the read record.

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 1
    • then Current parcel MA_SITE. LK_LAND_VALUE = Current parcel MA_SITE.LK_LAND_VALUE + ( read link record MA_SITE.LAND_VALUE or MA_SITE.LAND_VALUE_OVERRIDE if MA_SITE.LAND_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 1
    • then Current parcel MA_SITE. LK_LAND_AG_VALUE = Current parcel MA_SITE.LK_LAND_AG_VALUE + ( read link record MA_SITE.LAND_AG_VALUE or MA_SITE.LAND_AG_VALUE_OVERRIDE if MA_SITE.LAND_AG_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 2
    • then Current parcel MA_SITE. LK_MISC_VALUE = Current parcel MA_SITE.LK_MISC_VALUE + ( read link record MA_SITE.MISC_VALUE or MA_SITE.MISC_VALUE_OVERRIDE if MA_SITE.MISC_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 or = 2
    • then Current parcel MA_SITE. LK_BLDG_VALUE = Current parcel MA_SITE.LK_BLDG_VALUE + ( read link record MA_SITE.BLDG_VALUE or MA_SITE.BLDG_VALUE_OVERRIDE if MA_SITE.BLDG_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE. LK_INC_GRM_VALUE = Current parcel MA_SITE. LK_INC_GRM_VALUE + ( read link record MA_SITE.INCOME_GRM_VALUE or MA_SITE.INCOME_GRM_VALUE_OVERRIDE if MA_SITE.INC_GRM_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE. LK_INC_DIR_VALUE = Current parcel MA_SITE. LK_INC_DIR_VALUE + ( read link record MA_SITE.INCOME_DIR_VALUE or MA_SITE.INCOME_DIR_VALUE_OVERRIDE if MA_SITE.INC_DIR_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE. LK_MRA_VALUE = Current parcel MA_SITE.LK_MRA_VALUE + (read link record MA_SITE.MRA_VALUE or MA_SITE.MRA_VALUE_OVERRIDE if MA_SITE.MRA_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0
    • then Current parcel MA_SITE.PP_LK_VALUE = Current parcel MA_SITE.PP_LK_VALUE + ( read link record MA_SITE.PP_VALUE or MA_SITE.PP_VALUE_OVERRIDE if MA_SITE.PP_OVERRIDE = -1 ) * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

We also load the linked comparable sales value for MA_MASTER

  • If PC_PARCEL_LK_TYPE.VALUE_ON = 0 then Current parcel MA_MASTER.LK_COMP_VALUE = read link record MA_MASTER.COMP_SALES_VALUE * MA_LINKS_PERCENT.PERCENT_OF_TOTAL / 100.

 

Linked Values Rounding

MA_SITE.LK_LAND_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘land’).

For example, if the rounding value is 1000, and the total value is 45678 then the value is 46000. If the rounding value was 100 then it would have been 45700. The default is always to 0 decimal.

  • MA_SITE.LK_LAND_AG_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘land’).
  • MA_SITE.LK_MISC_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘misc’).
  • MA_SITE.LK_BLDG_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘bldg’).
  • MA_SITE. LK_INC_GRM_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘inc’).
  • MA_SITE. LK_INC_DIR_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘inc’).
  • MA_SITE. LK_MRA_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘mra’).
  • MA_SITE.PP_LK_VALUE is rounded to 0 decimal.
  • MA_SITE. LK_COMP_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘compval’).

 

Step 9 – Compute the Individual Site Values

In this step, we compute the individual values for the MA_SITE records

Compute Site Values

  • MA_SITE.LAND_VALUE = MA_SITE.LAND_VALUE + MA_SITE.LK_LAND_VALUE
  • MA_SITE.BLDG_VALUE = MA_SITE.BLDG_VALUE + MA_SITE.LK_BLDG_VALUE
  • MA_SITE.MISC_VALUE = MA_SITE.MISC_VALUE + MA_SITE.LK_MISC_VALUE
  • MA_SITE. PP_VALUE = MA_SITE. PP_VALUE + MA_SITE. PP_LK_VALUE

 

  • MA_SITE. INC_DIR_VALUE = MA_SITE. INC_DIR_VALUE + MA_SITE.LK_INC_DIR_VALUE + (MA_SITE.INCOME_LAND_AMT or MA_SITE.INCOME_LAND_OV is not null) + (MA_SITE.INCOME_BLDG_AMT + or MA_SITE.INCOME _BLDG_OV is not null) + (MA_SITE.INCOME_MISC_AMT or MA_SITE.INCOME_MISC_OV is not null)

 

  • MA_SITE. INC_GRM_VALUE = MA_SITE. INC_GRM_VALUE + MA_SITE.LK_INC_GRM_VALUE + (MA_SITE.INCOME_LAND_AMT or MA_SITE.INCOME_LAND_OV is not null) + (MA_SITE.INCOME_BLDG_AMT + or MA_SITE.INCOME _BLDG_OV is not null) + (MA_SITE.INCOME_MISC_AMT or MA_SITE.INCOME_MISC_OV is not null)

 

  • MA_SITE. MRA_VALUE = MA_SITE. MRA_VALUE + MA_SITE. LK_MRA_VALUE + (MA_SITE.MRA_LAND_AMT or MA_SITE.MRA_LAND_OV is not null) + (MA_SITE.MRA_BLDG_AMT + or MA_SITE.MRA_BLDG_OV is not null) + (MA_SITE.MRA_MISC_AMT or MA_SITE.MRA_MISC_OV is not null)

 

Adjust Building Value for Building Residual Method (6)

The method in use = 6 is for the building residual method, where the total value is stored in the building value.
We must re-adjust the building so that when we add back the land, misc and building to compute the CAMA value the sum equal the current building value.
By convention, a residual building value can never be 0 for an improved property, so if the residual value is 0 we set it to 100.

  • If MA_MASTER.METHOD_IN_USE = “6”
    • then MA_SITE.BLDG_VALUE = MA_SITE. BLDG_VALUE – MA_SITE_LAND_VALUE – MA_SITE.MISC_VALUE
    • If MA_SITE.BLDG_VALUE < 0 If MA_SITE.MISC_VALUE > 0
      • then Add MA_SITE.BLDG_VALUE to MA_SITE.MISC_VALUE
      • then MA_SITE.BLDG_VALUE = 100
    • If MA_SITE.MISC_VALUE < 0
      • then MA_SITE_LAND_VALUE = MA_SITE_LAND_VALUE + MA_SITE.MISC_VALUE
      • then MA_SITE.MISC_VALUE = 0
      • Else
        • Add MA_SITE.BLDG_VALUE to MA_SITE.LAND_VALUE
        • MA_SITE.BLDG_VALUE = 100

Set Site CAMA Value

  • MA_SITE.CAMA_VALUE = (MA_SITE.LAND_VALUE or MA_SITE.LAND_VALUE_OVERRIDE when MA_SITE.LAND_OVERRIDE = -1) + (MA_SITE.BLDG_VALUE or MA_SITE.BLDG_VALUE_OVERRIDE when MA_SITE.BLDG_OVERRIDE = -1) + (MA_SITE.MISC_VALUE or MA_SITE.MISC_VALUE_OVERRIDE when MA_SITE.MISC_OVERRIDE = -1) + (MA_SITE.PP_VALUE or MA_SITE.PP_VALUE_OVERRIDE when MA_SITE.PP_OVERRIDE = -1)

 

Step 10 – Compute the Total Site Value

In this step we compute the total value for the MA_SITE records

  • If MA_MASTER.EXCLUDE_FROM_ROLL = -1 or MA_MASTER.METHOD_IN_USE = 2
    • then MA_SITE.TOTAL_VALUE = 0 go to step 11

Case MA_MASTER.METHOD_IN_USE
Cost (method 1,6 or 7)
Case “1”, “6” or “7” valuation using the cost technique

  • If MA_MASTER.EXCLUDE_FROM_ROLL <> 1
    • then we include the land value in the total
    • If the method is use is “7” then we use the ag land instead of the land
      • Add the land value to MA_SITE.TOTAL_VALUE. The land value is either MA_SITE.LAND_AG_VALUE or MA_SITE.LAND_AG_VALUE_OVERRIDE when MA_SITE.LAND_AG_OVERRIDE = -1
    • Else
      • Add the land value to MA_SITE.TOTAL_VALUE. The land value is either MA_SITE.LAND_VALUE or MA_SITE.LAND_VALUE_OVERRIDE when MA_SITE.LAND_OVERRIDE = -1

 

  • If MA_MASTER.EXCLUDE_FROM_ROLL <> 2
    • then we include the misc and bldg value in the total
    • Add the bldg value to MA_SITE.TOTAL_VALUE. The bldg value is either MA_SITE.BLDG_VALUE or MA_SITE.BLDG_VALUE_OVERRIDE when MA_SITE.BLDG_OVERRIDE = -1
    • Add the misc. value to MA_SITE.TOTAL_VALUE. The misc. value is either MA_SITE.MISC_VALUE or MA_SITE.MISC_VALUE_OVERRIDE when MA_SITE.MISC_OVERRIDE = -1
    • Add the pp value to MA_SITE.TOTAL_VALUE. The pp value is either MA_SITE. PP_VALUE or MA_SITE.PP_VALUE_OVERRIDE when MA_SITE.PP_OVERRIDE = -1

Comparable Sales (method 2)
Case “2” valuation by comparable sales

  • MA_SITE.TOTAL_VALUE = 0

Income (method 3 or 9)
Case “3” or “9” valuation by income dir
Method 9 is now the same as method 3 since it is now possible to add the land values to the income value.

  • MA_SITE.TOTAL_VALUE = MA_SITE. INC_DIR_VALUE or MA_SITE.INC_DIR_VALUE_OVERRIDE when MA_SITE. INC_DIR_OVERRIDE = -1

Case “4” valuation by income grm

  • MA_SITE.TOTAL_VALUE = MA_SITE. INC_GRM_VALUE or MA_SITE.INC_GRM_VALUE_OVERRIDE when MA_SITE. INC_GRM_OVERRIDE = -1

Correlated Values (method 5)
Case “5” correlated values
See correlated values section below.

MRA (method = 8)
Case “8” valuation by mra

  • MA_SITE.TOTAL_VALUE = MA_SITE. MRA_VALUE or MA_SITE.MRA_VALUE_OVERRIDE when MA_SITE. MRA_OVERRIDE = -1

Land Only (method L)
Case “L” valuation by land only

  • If MA_MASTER.EXCLUDE_FROM_ROLL <> 1
    • Then we include the land value in the total
    • Add the land value to MA_SITE.TOTAL_VALUE. The land value is either (MA_SITE.LAND_VALUE + MA_SITE.LK_LAND_VALUE) or MA_SITE.LAND_VALUE_OVERRIDE when MA_SITE.LAND_OVERRIDE = -1

 

Step 11 – Compute the Property CAMA value

In this step, we compute the CAMA value for the MA_MASTER record.

Add all MA_SITE to MA_MASTER:

  • LAND_VALUE
  • LAND_AG_VALUE
  • MISC_VALUE, BLDG_VALUE
  • INC_GRM_VALUE
  • INC_DIR_VALUE
  • MRA_VALUE, PP_VALUE
  • CAMA_VALUE
  • LK_LAND_VALUE
  • LK_LAND_AG_VALUE
  • LK_MISC_VALUE
  • LK_BLDG_VALUE
  • LK_INC_GRM_VALUE
  • LK_INC_DIR_VALUE
  • LK_MRA_VALUE
  • PP_LK_VALUE
  • INCOME_LAND_AMT
  • MRA_LAND_AMT
  • INCOME_BLDG_AMT
  • MRA_BLDG_AMT
  • INCOME_MISC_AMT
  • MRA_MISC_AMT

Add all MA_SITE.TOTAL_VALUE TO MA_MASTER.APPRAISED_VALUE

  • If MA_MASTER.METHOD_IN_USE = “2” and MA_MASTER.EXCLUDE_FROM_ROLL <> -1
    • then MA_MASTER.APPRAISED_VALUE = MA_MASTER_COMP_SALES_VALUE (See Roadmap, not part of this document)

Round MA_MASTER.APPRAISED_VALUE based on the MA_PARM_MAROUND information (code = ‘appval’).

  • If MIN_APP > MA_MASTER. APPRAISED_VALUE
    • then MA_MASTER. APPRAISED_VALUE = MIN_APP

 

Step 12 – Compute the OVERRIDE value

In this step we override the CAMA value based on MA_OVERRIDE record.

We get the MA_OVERRIDE record. If no record found we go to step 13.

Check override year is valid

  • If the (MA_MASTER.YEAR_ID >= MA_OVERRIDE.STARTING_YEAR or MA_OVERRIDE.STARTING_YEAR is NULL) and (MA_MASTER.YEAR_ID <= MA_OVERRIDE.ENDING_YEAR or MA_OVERRIDE.ENDING_YEAR is null)
    • else we go to step 13

Land

  • If MA_OVERRIDE.LAND_VALUE is not NULL
    • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 1 and MA_MASTER.METHOD_IN_USE = “1”, “6”, “L”
      • then
        • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER.LAND_VALUE + MA_OVERRIDE.LAND_VALUE
        • MA_MASTER.LAND_VALUE = MA_OVERRIDE.LAND_VALUE

 

  • If MA_OVERRIDE.LAND_AG_VALUE is not NULL
    • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 1 and MA_MASTER.METHOD_IN_USE = “7”
      • then
        • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER.LAND_AG_VALUE + MA_OVERRIDE.LAND_AG_VALUE
        • MA_MASTER.LAND_AG_VALUE = MA_OVERRIDE.LAND_AG_VALUE

Miscellaneous Structures

  • If MA_OVERRIDE.MISC_VALUE is not NULL
  • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 2 and MA_MASTER.METHOD_IN_USE = “1”, “6”, “7”
    • then
      • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER.MISC_VALUE + MA_OVERRIDE.MISC_VALUE
      • MA_MASTER.MISC_VALUE = MA_OVERRIDE.MISC_VALUE

Buildings

  • If MA_OVERRIDE.BLDG_VALUE is not NULL
  • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 2 and MA_MASTER.METHOD_IN_USE = “1”, “6”, “7”
    • then
      • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER.BLDG_VALUE + MA_OVERRIDE.BLDG_VALUE
      • MA_MASTER.BLDG_VALUE = MA_OVERRIDE.BLDG_VALUE

Income

  • If MA_OVERRIDE.INCOME_DIR_VALUE is not NULL
  • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and MA_MASTER.METHOD_IN_USE = “3”, “9”
    • then
      • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER. INCOME_DIR_VALUE + MA_OVERRIDE. INCOME_DIR_VALUE
      • MA_MASTER.INCOME_DIR_VALUE = MA_OVERRIDE. INCOME_DIR_VALUE

 

  • If MA_OVERRIDE. INCOME_GRM_VALUE is not NULL
  • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and MA_MASTER.METHOD_IN_USE = “4”
    • then
      • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER. INCOME_GRM_VALUE + MA_OVERRIDE. INCOME_GRM_VALUE
      • MA_MASTER.INCOME_GRM_VALUE = MA_OVERRIDE.INCOME_GRM_VALUE

Comparable Sales

  • If MA_OVERRIDE.COMP_SALES_VALUE is not NULL
  • then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and MA_MASTER.METHOD_IN_USE = “2”
    • then
      • MA_MASTER.APPRAISED_VALUE = MA_MASTER.APPRAISED_VALUE – MA_MASTER.COMP_SALES _VALUE + MA_OVERRIDE. COMP_SALES_VALUE
      • MA_MASTER.COMP_SALES_VALUE = MA_OVERRIDE.COMP_SALES_VALUE

Correlated Values

  • If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and MA_MASTER.METHOD_IN_USE = “5”
  • then
    • See correlated values section below

 

Step 13 – Update Last Value & Date

In this step we check if the appraised value as changed, and if so we move it to the last value column.

  • If prior appraised value (step 1) <> MA_MASTER.APPRAISED_VALUE
  • Then
    • MA_MASTER.LAST_VALUE = prior appraised value
    • MA_MASTER.LAST_VALUE_DATE = now

 

Step 14 – Compute Equalization Changes

In this step we compute the equalization change.
NOTES:

  • This routine was custom to Winnipeg but going forward this way of computing the equalization will be the standard.
  • We might have to review this for NY state, as they keep the increase and decrease in a separate column.
  • We are slightly changing the Winnipeg routine to keep the physical and equalization change in the increase column if positive and decrease column if negative.

This step is only performed on MA_MASTER.FROZEN_ID = 0 and if CALC_INC_DEC = “yes”

  • MA_MASTER(Current).LAST_YEAR_VALUE= 0
  • MA_MASTER(Current).EQUALIZATION_INC= 0
  • MA_MASTER(Current).PHYSICAL_INC= 0
  • MA_MASTER(Current).EQUALIZATION_DEC = 0
  • MA_MASTER(Current).PHYSICAL_DEC = 0

curCurrentYearVal = MA_MASTER(Current).APPRAISED_VALUE

Get a dataset (called MA_MASTER – Prior Year dataset) for MA_MASTER
where the year_id is = MA_MASTER(Current).YEAR_ID -1 and MA_MASTER(Prior Year dataset).FROZEN_ID > -32766 and < 1 ORDER BY FROZEN_ID.

  • If Not MA_MASTER(Prior Year dataset).EOF ….. Then (Process only if there is at least one record for last year)
    • (The first record is always the smallest frozen record which contains the last value finalized)
    • MA_MASTER(Current).LAST_YEAR_VALUE= MA_MASTER(Prior Year dataset).APPRAISED_VALUE
    • If Not IsNull(MA_MASTER(Prior Year dataset).APPRAISED_VALUE) Then curLastYearOriginalVal = MA_MASTER(Prior Year dataset).APPRAISED_VALUE

 

    • dtValueFinalizedDate = ‘1/1/2000’ (We initialize to Jan 1, 2000)

 

    • If Not IsNull(MA_MASTER(Prior Year dataset).appraised_date) Then dtValueFinalizedDate = MA_MASTER(Prior Year dataset).appraised_date

 

    • If MA_MASTER(Prior Year dataset).frozen_id < 0 Then move to the last MA_MASTER(Prior Year dataset) record ‘ the last record is always frozen 0

 

    • If Not IsNull(MA_MASTER(Prior Year dataset).APPRAISED_VALUE) Then curLastYearVal = MA_MASTER(Prior Year dataset).APPRAISED_VALUE

Get a dataset (called MA_MASTER(Current Year dataset) for MA_MASTER
where the year_id is = MA_MASTER(Current).YEAR_ID and MA_MASTER(Current Year dataset).FROZEN_ID > -32766 and < 0 ORDER BY FROZEN_ID

curOriginalVal = curCurrentYearVal

Do Until MA_MASTER(Current Year dataset).EOF Or booCurrentOriginalFound

  • booCurrentOriginalFound = True

 

  • If curLastYearOriginalVal = curLastYearVal Then (If no change found in prior year we need to compare using the original current year (-1)

Move to the last record of MA_MASTER(Current Year dataset)
booCurrentOriginalFound = False

  • If Not IsNull(MA_MASTER(Current Year dataset).appraised_date) Then
    • If MA_MASTER(Current Year dataset).appraised_date > dtValueFinalizedDate Then ( If we have a date greater than the prior year value date then we need to read the prior record)

booCurrentOriginalFound = False

  • If Not IsNull(MA_MASTER(Current Year dataset).APPRAISED_VALUE) And booCurrentOriginalFound = False Then

curOriginalVal = MA_MASTER(Current Year dataset).APPRAISED_VALUE

  • Move to the next record of MA_MASTER(Current Year dataset)

Loop

If we don’t have a prior year and the original current year = current value then all changes are considered physical

  • If curLastYearVal = 0 And curLastYearOriginalVal = 0 And curCurrentYearVal = curOriginalVal
    • Then MA_MASTER(Current).PHYSICAL_INC= curCurrentYearVal
    • Else
      • MA_MASTER(Current).PHYSICAL_INC= curCurrentYearVal – curOriginalVal + curLastYearVal – curLastYearOriginalVal
      • MA_MASTER(Current).EQUALIZATION_INC= curCurrentYearVal – curLastYearOriginalVal – MA_MASTER(Current).physical_inc
      • If MA_MASTER(Current).physical_inc < 0
        • then
          • MA_MASTER(Current).physical_dec = MA_MASTER(Current).physical_inc * -1
          • MA_MASTER(Current).physical_inc = 0

 

      • If MA_MASTER(Current). EQUALIZATION_INC < 0
        • then
          • MA_MASTER(Current). EQUALIZATION_DEC = MA_MASTER(Current). EQUALIZATION_INC * -1
          • MA_MASTER(Current). EQUALIZATION_INC = 0

 

Step 15 – Transfer to Tax

This step will be added on the batch program to transfer values is completed – see roadmap
In this step we transfer the appraised values to the Real Property Tax
(VB6: pv_audit_and_transfer_to_tax)

  • If TRANS_TO_TAX = “yes” we perform this step.
    • Otherwise the compute is completed.

 

Correlated Value Logic

This section relates to prior reference in this document when MA_MASTER.METHOD_IN_USE = ‘5’

IF MA_MASTER.OVERRIDE_PCT_DIST is NULL or = 0
then
(We load the distribution percentages)

  • MA_MASTER.pct_cama_value = 0
  • MA_MASTER.pct_sale_value = 0
  • MA_MASTER.pct_inc_dir_value = 0
  • MA_MASTER.pct_inc_grm_value = 0
  • MA_MASTER.pct_mra_value = 0

Get the MA_PARM_MULTDIST using the CAMA parameter logic (Jurisdiction, neighborhood…) and the value of PC_LEGAL_INFO.CLASS for MA_PARM_MULTDIST.PUSE_CODE

If the following parameter values are NULL consider them to be 0.

  • MA_MASTER.pct_cama_value = MA_PARM_MULTDIST.cama_pct
  • MA_MASTER.pct_sale_value = MA_PARM_MULTDIST.SALE_pct
  • MA_MASTER.pct_inc_dir_value = MA_PARM_MULTDIST.INC_DIR_pct
  • MA_MASTER.pct_inc_grm_value = MA_PARM_MULTDIST.INC_GRM_pct
  • MA_MASTER.pct_mra_value = MA_PARM_MULTDIST.MRA_pct

IF MA_PARM_MULTDIST.MULTIDIST_EXPRESSION is not null
then

  • MA_MASTER.APPRAISED_VALUE = evaluated expression
  • No further processing is required

Compute the MA_MASTER_APPRAISED_VALUE =

  • (MA_MASTER.CAMA_VALUE * MA_MASTER.pct_cama_value / 100) +
  • (MA_MASTER.COMP_SALES_VALUE * MA_MASTER.pct_SALE_value / 100) +
  • (MA_MASTER.INCOME_DIR_VALUE * MA_MASTER.pct_INC_DIR_value / 100) +
  • (MA_MASTER.INCOME_GRM_VALUE * MA_MASTER.pct_INC_GRM_value / 100) +
  • (MA_MASTER.MRA_VALUE * MA_MASTER.pct_MRA_value / 100)

 

 

101-ma-compute-Global

 

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...

 

MA – CAMA Building Area

CAMA Building Area

Overview

The Building Area divider lists the building areas added to the building drawing in either Govern Sketch and Apex, depending on the application you are using. It totals the areas for each code and lists them under the following headings: Area Code, Base Area, Actual Area, Heated Area, Percent Heated, Perimeter, Living Area, and Effective Area. It lists the following details for each code. This information is saved to MA_BLDG_AREA:

Documentation

To view this information in pdf format, click on the following link:
UsrBuildingsArea.pdf

Overriding the Building Area State

The Building Area divider has two states:

Override State
In this state, you can add, update, and delete building area codes in the Building Area grid. When you are in this state, the Block Area Override icon is visible. Click this icon to do the following:

  • Prevent users from making any modifications to the data on the grid.
  • Reset the Building Area grid
NOTE: When you click the Block Area Override icon, the application resets the Building Area grid. All the existing overrides are removed. The grid is populated from the building areas drawn on the Drawing Editor.

Normal State
In this state, you cannot add, update, or delete the building areas codes in the Building Area grid. This is the default state before any modifications are made to the Building Area grid. The Allow Area Override icon is visible. Click the Allow Area Override icon to permit users to add, modify, and delete building area codes in the grid.

Building Area Icons

New: Click the New icon to add a new area code for the building. For the Drawing Area calculation, this is the same as adding a new area in the Govern Sketch or Apex drawing editor. The added area is used in the calculation; however, it is not added to the drawing or sketch on the editor. See Area. To add a new row, select the last row in the list. click the Allow Building Area Modifications icon and click the New icon.

Cancel: The Cancel icon is displayed when you click New. Click Cancel icon to remove a new unsaved row.

Overriding the Building Area Tab

The Building Area tab has two states, an override state in which you can add, modify, and delete areas to the building and a blocked state.
Save
Click the Save icon to save a new entry or modifications to an existing one.
Delete
Click the Delete icon to remove a saved row.

Viewing Building Area Records

The Building Area divider displays values for each area code by Base Area, Actual Area, Heated Area, Percent Heated, Heated, Perimeter, Living Area, Effective Area, Building ID, and Building Sequence:

Totals are provided for each column. These totals are also displayed on the Building Structural Elements and Features Values tab of the form.
Base Area
This column provides the area defined for the area code by a drawing tool.
Actual Area
This column displays the Base Area multiplied by the Actual Rate as defined in the Actual Area % field on the Drawing Area Codes form

Actual Area = Base * Actual Area %

Heated Area
This column displays one of the following options: Heated, Not Heated, or Partially Heated to indicate the area of the building that is heated.
Heated %
This column displays the percentage of the area that is heated as defined in the Heated field on the Drawing Area Codes form, as follows:

  • If Not Heated is selected in the Heated field, no value is displayed in the Heated % field.
  • If Heated is selected in the Heated field, 100% is displayed in the Heated % field.
  • If Partially Heated is selected in the Heated field, -1 is displayed in the Heated % field and a double asterisk is displayed beside the area code.

For Partially Heated:

  1. Double-click anywhere in the row beside the area code.
  2. Enter a percentage in the Heated Structure text box.
  3. Click OK.

This text box appears when Partially Heated is selected under Heated

Perimeter
This column displays the perimeter of the area if Perimeters is selected on the Drawing Area Codes form. This is also displayed in the Structural Element grid on the Building Drawing Edit form.

If a row for a structural element is grayed out, the values are not included when the total amounts are calculated. See Exclude From Computation on page 110 in the Administrator section.

Living
This column displays the value in the Actual column if Living Area is selected on the Drawing Area Codes form (Base * Actual %). Otherwise, no value is displayed. In the final calculation for the building this value determines the percentage of the actual area that can be calculated as living space.
Building ID
This field displays the Building ID defined for the property on the Buildings record.
Building Sequence Number
This field displays the Building Sequence Number defined for the property on the Buildings record.
Negative Area
Negative areas are displayed on the Building Area tab if codes with negative area are drawn. Typically, negative areas are used to represent areas, such as a stairwell or courtyard that do not need to be included in the overall area of the building. The following screen shot includes codes with negative areas.

 

 

101-ma-frm-012

 

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...

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...

MA – Property Information

CAMA Property Information

Version 6.1 (under review)

Overview

The Govern CAMA Property Information form is used for entering and viewing information about the appraisal. This includes the appraisal method and all appraised values.

Appraisal Method

The values depend on the Method In Use selection for the property:

1 – Cost:This method provides a total of the values from the land, agricultural, building, and miscellaneous structures records.

2Comparable Sales: This method provides a total value based on a comparison with similar properties

3 – Income Direct Capitalization Rate (DIR) This method provides a value for the income if the Income DIR method is used. Refer to the Mass Appraisal Income guide for details.

4 – Income Gross Rent Multiplier (GRM) This method provides a value for the income if the Income GRM method is used. Refer to the Mass Appraisal Income Data guide for details.

5 – Correlated Values: This method determines a value according to the Percentages defined on the Mass Appraisal Correlated Values Distribution Parameters validation table, the formula or logical expression defined on this table, or the override percentage values entered by the user: Selecting the Correlated Values method enables the Correlated Values Override % Distribution fields at the bottom of the Summary tab.

6 – CAMA Building Residual

8- Market Approach (MRA): This method provides a value if the MRA method is used. Refer to the Mass Appraisal Buildings guide for details.

Exclude From Roll

The Exclude From Roll combo box is always disabled.
It displays one of the following values for the Master Parcel according to the selection made in the Value On field in the CAMA Appraisal Linking form

  • Building Only if Improvement Only is selected.
  • Land Only if Land Only is selected.
  • All Values if All Values is selected.

Correlated Values

The Correlated Values section is used with the Correlated Values appraisal method.
Default Values are define in the Mixed Use / Correlated Values validation table in Govern Admin.
The Override checkbox is enabled if the Correlated Values appraisal method is selected from the Method in Use drop-down list.
The following values are displayed and can be overridden:

  • OVERRIDE_PCT_DIST
  • PCT_CAMA_VALUE
  • PCT_SALE_VALUE
  • PCT_MRA_VALUE
  • PCT_INC_DIR_VALUE
  • PCT_INC_GRM_VALUE

Mixed Use Values

The Mixed Use values are displayed if Mixed Use is selected from the Property Type form in the Property Control > Legal Information form.
Available property types are:

  • 0 Mixed Used
  • 1 Residential
  • 2 Open Space
  • 3 Commercial
  • 4 Industrial
  • 9 Exempt
  • 7 Vacant Land

Table: VT_USR_PROPTYPE

The following values are displayed and can be overridden:

  • MIXED_USE_OVERRIDE
  • PCT_MIX_COMMERCIAL
  • PCT_MIX_EXEMPT
  • PCT_MIX_RESIDENT
  • PCT_MIX_INDUSTRIAL
  • PCT_MIX_OPEN_SPACE
  • RESIDENTIAL_VALUE
  • COMMERCIAL_VALUE
  • OPEN_SPACE_VALUE
  • INDUSTRIAL_VALUE
  • EXEMPT_VALUE

Roll Forward

If you have records in future years, you can roll forward the Property Information record.
If you have an active Split/Merge record, a message appears.

Technical Information

BED Entity

There is one entity for the Property Information form: MA_PropInfo
The CAMA Property History and CAMA Value Override entities are included in the OFD model, but these are also available as separate stand-alone models.

BED Attributes

Three attributes are added to the form. [To be verified] These are calculated values that use the following expressions.
BUILDING_DIR IsNull(@attrINCOME_DIR_VALUE,0)-IsNull(@attrLAND_VALUE,0)
BUILDING_GRM IsNull(@attrINCOME_GRM_VALUE,0)-IsNull(@attrLAND_VALUE,0)
BUILDING_MRA IsNull(@attrMRA_VALUE,0)-IsNull(@attrLAND_VALUE,0)

OpenForms Designer

Controller

  • Project MsGovern.OpenForms.CustomControls
  • Class MA_PropertyInformation_Control

 

Prerequisites

Before completing the CAMA Property Information forms, the following Property Control records are required.

  • Property Control Property Information / Parcel Information: The property record that is used as the base for all other records.
  • Legal Information: If you are using the Mixed Use / Correlated Values appraisal method.
  • Property Area: If you are using the Mixed Use / Correlated Values appraisal method.

 

 

101-ma-frm-014

 

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...