MA – Buildings Introduction

Govern OpenForms Mass Appraisal Building Introduction

Overview

Govern CAMA: Buildings is used for maintaining information on the buildings associated with a property. It provides numerous tables and codes that you can customize to meet the needs of your organization for appraising the value of a building. As well, it provides state-of-the-art tools for creating building sketches

The first part of this guide describes the administrative setup. For the administrative setup, you need to create the validation tables and related codes that are required for building data.
The second part describes the user forms, including Buildings, for general information, MA – Drawing Apex and Govern Sketch, for creating building sketches and determining the building area, MA – Building Structural Elements and Features, and MA – MRA for determining the fair market value.

This guide provides instructions on the administrative and user procedures for setting up and maintaining building information in Govern CAMA.

The Govern CAMA information for the other CAMA modules is described in the following guides:

  • Govern CAMA: General Information: This guide provides the information common to all the Mass Appraisal sub-modules. It covers all the CAMA batch processes. It is recommended to read and follow the instructions in this guide before proceeding with the other modules.
  • Govern CAMA: Miscellaneous Structures: This guide describes the administrative setup and data entry for miscellaneous structures.
  • Govern CAMA Land Information: This guide describes the administrative setup and data entry for Land Information.
  • Govern CAMA: Income: This guide describes the administrative setup and data entry for properties generating income.
  • Govern CAMA: Sales and Comparable Sales: This guide describes the administrative setup and data entry for Sales and Comparable Sales.

What’s New

This section lists the new features in the Govern CAMA Buildings 6.0. Throughout the online manuals and the Help files, the new features are indicated by the New symbol. See the Mass Appraisal What’s New page.

Display a Description with the Building Drawing Code

A new option is available in the Building Drawing options. You can now display the short description along with the drawing code. Alternatively, you can continue to display the code only. See Drawing Editor Options.

Display a Tooltip for a Building Structural Element

You can add a tool-tip to any building structural element using one of the following procedures, depending on whether you want a short or a long tip. For both methods, the tool-tips are created in Govern Admin. See Adding a Tool-tip.

Apply a Percentage to Structural Elements Using a Single Validation Table

You can now apply a percentage in order to adjust the rate of structural elements that are set up with only a single validation table. For example, if you have a structural element for heating and a building is only 100% heated, you can enter 60% on the Building Structural Elements form. The percentage could be used to adjust the rate or for informational purposes only.

In previous releases, the percentage was used in order to create a breakdown by percentage for structural elements that were created with multiple validation tables. For example, the exterior wall type structural element could be created with three validation one for each of the following materials: brick, stucco, and timber. The value of the exterior wall type would be computed according to how much of each material was used to compose the walls, such as 60% brick and 40% stucco. A percentage validation could be added to ensure that all elements add up to 100% or no percentage validation could be added. This could be useful if you needed to include more variations, such as walls that were composed of other materials in addition to the ones listed.

Creating Building Records

The Create Building in MA icon is now removed. Previously, this icon was enabled when you created a new building. It was used to add the new building record to the Mass Appraisal tables. Otherwise, the building existed only in the Property Control tables. The building is now automatically added to Mass Appraisal when you save the new record.

Applying Minimum and Maximum Values to Structural Elements

You can now set a minimum and / or maximum numeric value for building structural elements tables defined as Feature Element Category.

 

Mass Appraisal General Administrative Setup

Before defining building-specific information, complete the general administrative setup for all Mass Appraisal modules. This is described in the Mass Appraisal General Information guide. It comprises the following forms, tables, and codes:

  • Mass Appraisal General Parameters: 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:
    • Building Area Size: the area of each structural element
    • Building Values: the total building value
    • Site
  • Limited Assessment Validation Table

Mass Appraisal Buildings Administrative Setup

The Mass Appraisal administrative setup for buildings comprises the following administrative forms, Validation Tables and Codes.

  • Mass Appraisal Administrative Forms for Buildings
  • Mass Appraisal General Parameters for building data:
  • Page 1 Yearly Data:
  • Page 2 Building Value Computations:
  • Pages 4 and 5 Building Structural Elements:
  • Building Model / Jurisdiction form:
  • Renumber Building Sequence Numbers form:
  • Mass Appraisal Buildings Validation Tables and Codes
  • These are described under the following headings:
  • Drawing (Table: MA_PARMDRAWING). Mass Appraisal Validation Tables and Codes for Building Data
  • Building Structural Elements
  • Using Percentages with Structural Elements
  • Adding a Tooltip
  • Element Categories
  • Area Adjustment Element Category
  • Area Size Override Element Category
  • CAMA Adjustments Element Category
  • Depreciation
  • Depreciation Override
  • Feature Element Category
  • Header Element Category
  • Overall Adjustments Element Category
  • Quality Points Element Category
  • Rate Adjustment Element Category
  • Building Use Codes
  • Size Adjustments (Table: MA_PARMSIZEADJT)
  • Occupancy
  • Fair Market Value Model Validation Table
  • Fair Market Value Elements Validation Table

Overview of the Govern Mass Appraisal User Forms

The Mass Appraisal Building Structural Elements form includes dividers for the Buildings, Building Structural Elements & Features, Building Drawing, and for Real Property Exemptions applied to buildings.

Buildings

The Buildings form maintains Buildings on the current property. It stores the location and effective year of the building, and assigns an ID according to the type of building. The Buildings form is a prerequisite for building drawing and building structural elements and features records. See Buildings on page 139.

Building Linking

The Building Linking form can be useful if you have multiple buildings that are owned by a single individual or company or that are part of a multi-unit franchise with a single owner. You can use this form to link the buildings together. One building is designated as the Master Building and the others are linked to it. Before you can link buildings together, you need to link the parcels on which the buildings are located. This is done through the Parcel Linking form. Refer to the General Information Parcel Linking section of the Property Control guide for details. For details on linking buildings, see Building Linking on page 142.

Building Drawing Forms

The Building Drawing Apex and Govern Sketch forms provide state-of-the-art tools for creating and modifying drawings of structural elements. They also summarize the area and perimeter of each element and provide totals for the building.
Two types of Building Drawing tools are supported:

  • Govern Sketch: This is the standard tool built into Govern. If you are using Govern Sketch.
  • Apex: Apex is a third-party tool that is partially supported by Govern. If you have Apex installed.

Building Structural Elements and Features

The Building Structural Elements and Features form maintains details on each structural element within a building. The form has two dividers: Inventory for maintaining details on each structural element and Summary for the RCN, RCNLD, effective rate, adjustments and the total value of the building. See Building Structural Elements and Features on page 172.

Building Exemptions

You can apply tax exemptions to the land, building, income, or miscellaneous structures records. If an exemption applies to the building only, use the CAMA Exemptions form to display the exemption and calculate the value. See Building Exemptions.

MRA

The Mass Appraisal Multiple Regression Analysis (MRA) form is used for calculating the fair market value of the selected property. The value is based on a Market Model that is defined in Govern Admin. The Market Model comprises a formula or logical expression and a number of market elements. Each market element defines a characteristic of a building or property that influences the market value, such as the number of bedrooms or effective living area. Each market model and each market element can have a number of codes. Each code is based on a fixed value, formula, or logical expression. See MA – MRA.

 

 

101-ma-buildings

 

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 Drawing Apex

CAMA Building Drawing Apex

Overview

The Building Drawing Apex form is used for creating and displaying drawings of the areas within the selected building. It calculates and displays the area and perimeter of the structural elements, by element type. It provides totals for the building,

Prerequisite Forms

Before creating a Building Drawing, you need a Buildings record.

Accessing the Building Drawing Form

To access the Drawing form:

  1. Open a Profile with Mass Appraisal Drawings.
  2. Select the Mass Appraisal Drawing form in the Forms Explorer.
  3. Perform a search and load the property to the form.

The Building Drawing form has two dividers: Drawing displaying the drawing created in the Apex application and the Building Area showing the calculated areas and other building drawing dimensions in grid format.

Building Drawing Icons

Browsing Building Drawing Records

If multiple building drawing records exist for the property, use the right and left navigational arrows to scroll to a specific record.

Saving the Building Drawing Record

Click the Save icon to save a new record or any modifications to an existing one.

Open Apex

Click the Open Apex icon to open the Apex application and create or update a building drawing.
Double-clicking in any white area within the building drawing opens the Apex application as well.

Refresh

Click the Refresh icon to refresh the drawing in the Building Drawing form.
The new and delete icons do not exist on the Building Drawing form. Drawings are created and deleted from the Buildings form.

The Drawing function allow the user to view the building drawing of the selected building. The user can launch Apex to edit the drawing. If the user wants to keep the changes, he must save in govern after the changes in Apex. The areas will be recalculated and updated in the two area tables.
Roll forward will be made, but the drawing and the areas we always replaced.

See Also

Product Knowledge 3rd party APEX (303)

R&D Employees

 

 

101-ma-frm-005

 

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 – Sales and Comparable Sales

Sales & Comparable  Sales

Overview

Comparable Sales (Comp sales) is a valuation method to appraised a property based on sales of similar properties and adjustments to take into account the property characteristics and different market factors.
An important tool for an organization to validate that their values are fair and as close to reality as possible. It plays a major role in property owners appeals (contesting their appraised value) and court cases.

General Process

1-Creation / Validation of Sales

  • Sales are created and validated, (qualified), grantors (seller) and grantees (buyer) are recorded.
  • Note: Ownership changes, updates of mailing index and property exemption to names (i.e. veterans) inactivation is triggered or processed automatically (depends on setup).

2-Comparable Sales Extract

The sales extract batch program is run to:

  • Extract the sales to use in the analysis based on different criteria.
  • Calculate the Subject to Comparable Selection Index
  • Calculate the Comparable Sales Adjustment

3-Comparable Sales Function

  • Subject and Comparable property characteristics are displayed (Sales extracted, Open search or Previously saved)
  • Comparable properties can be added (force compare), removed or re-ordered in the grid sorted by selection index (lower = most comparable)
  • Comparable sales results are saved and/or printed (mostly for appeals)

Setup

General Parameters

  • System Registry General Parameters (page 3 tab)

 

Mass Appraisal Tables Parameters

  • table xxx

 

Product Codes

Product Code Name Comments
101-pc-frm-xxx Deeds Function Legal Deed of Sale Function can be used to generate sales
101-pc-ofr-xxx Open Form Reference Model This OF model includes
101-ma-frm-015 Sales Function
101-ma-ofr-015 Open Form Reference Model This OF model includes links to other parcels.
Sale grantors (sellers) and sale grantees (buyers) are a custom ctrl
703-ma-bp-002-[v10.8] Comparable Sales Extract Batch Program
Govern for Windows for Hybrid OF version up to [v6.1]
101-ma-frm-029 Comparable Sales Function Subject and Comps Property Characteristics are displayed
101-ma-ofr-029-[v6.1] Comparable Sales Open Form Reference Model
101-ma-frm-029-rpt Standard or Custom Report??? Crystal or SSRS
703-Govbat Comparable Sales Computation
Govern for Windows for Hybrid OF version up to [v6.1]
703-GovBat-compute Govern Batch – Appraisal Value Computation Batch Calculation (new year…)
703-GovBat-daemon Govern Batch – DAEMON On-line Calculation
702-Admin Comparable Sales Parameters
Govern for Windows for Hybrid OF version up to [v6.1]
702-Admin-General Comp sales General Parameters (System Registry)
702-Admin-CompSale Comp sales Parameters (Mass Appraisal Tables)

Specifications

Sales Extract

  • Sales are extracted by type (qualified / not qualified) and sale date
  • Sales extracted are recorded by FISCAL YEAR.
  • Selection index are calculated based on different factors (parameters). They can be included or excluded when executing the batch program.
  • The higher the selection index, the less the sale is comparable
  • Adjustment index …. […]

Comparable Sales

  • Displays comparable properties for the subject parcel (current parcel id) based on the selection index (lower = closer)
  • Select/Show comparables from:
    • Extracted Sales (ma_sales_extract),
    • Previously Saved Sales
    • Open Database Search

What’s New

Comp Sales Changes

 

 

101-ma-compsales

 

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 – Compute Building Value

CAMA Building Value Computation

General Purpose

The purpose of the Building Computation is to provide values of all the Govern’s system columns for a given record of the table MA_BUILDINGS_XX. The ultimate goal of this compute is to provide a building value (the cost for a building structural elements) based on building’s physical characteristics (called structural elements). [VB6 class name: GvObjCostComp OF:MACostComp.cls]

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

General Parameters (SY REGISTRY by YEAR)

  • QP_ROUNDING = “Mass Appraisal”, “Quality Point Rounding” = (‘yes’ or ‘no’)
  • QP_DECIMAL = “Mass Appraisal”, “Quality Point Decimal”
  • USE_BASE_AREA_FOR_LOOKUP = “Mass Appraisal”, “Bldg Lookup By Base Area” = (‘yes’ or ‘no’)
  • ROUND_UP_AREA = “Mass Appraisal”, “Round Up Area” = (‘yes’ or ‘no’)
  • EFFECTIVE_LIVING = “Mass Appraisal”, “Effective = Living” = (‘yes’ or ‘no’)
  • “Mass Appraisal”, “Size Adjt Method”
  • CAMA_ADJ_DECIMAL = “Mass Appraisal”, “Cama Adjustment Decimal”
  • “Mass Appraisal”, “Size Adjt. Decimal”
  • SE_BY_MODELS = “Mass Appraisal”, “Associate SE to models” = (‘yes’ or ‘no’)
  • SE_BY_MODELS_YEAR = “Mass Appraisal”, “Associate SE to models Year Effective”
  • SQUARE_ROOT = “Mass Appraisal”, “Area In Square Root” = (‘yes’ or ‘no’)
  • “Mass Appraisal”, “Property Type From pc_legal_info” = (‘yes’ or ‘no’)
  • USE_METRIC = “General”, “use metric” = (‘yes’ or ‘no’)
  • SIZE_ADJ_METHOD = “Mass Appraisal”, “Size Adjt Method” = (‘1’ or ‘2’)
  • SIZE_ADJ_DECIMAL = “Mass Appraisal”, “Size Adjt. Decimal” default 3
  • PROPERTY_TYPE_FROM_PC_LEGAL = “Mass Appraisal”, “property type from pc_legal_info” = (‘yes’ or ‘no’)

Parameters discontinued in Govern OpenFroms 6.1.

  • “Mass Appraisal”, “Compatibility SE Compute”
  • “Mass Appraisal”, “Compatibility SE Compute Year Effective”
  • “Mass Appraisal”, “Optimize Computation Speed”
  • “Mass Appraisal”, “Round by Drawing Code”
  • “Mass Appraisal”, “Skip Rates Interpolation”

Changed Parameters

  • DEPR_BASE_YEAR=Year value (ex:2015), “Depreciation Year” should now be using the registry by year under “Mass Appraisal”

 

Tables and Fields

Tables

  • MA_BUILDINGS (includes old MA_BLDG_INFO)
  • MA_BLDG_AREA_YEAR (replaces old MA_BLDG_AREA)
  • PC_AREA.NBHD NOTE: At a minimum the PROPERTY_TYPE column has to be available to the building context, but ideally all columns of PC_LEGAL_INFO (to validate)
  • PC_LEGAL_INFO.PROPERTY_TYPE (same NOTE)
  • MA_BUILDINGS. BLDG_ID + BLDG_SEQ -> PC_LK_PARCEL_BLDG.P_ID
  • PC_LK_PARCEL_BLDG.P_ID -> PC_AREA.P_ID
  • PC_AREA.NBHD -> MA_PARM_NBHD.NBHD_CODE
  • MA_BUILDINGS.BLDG_USE_CODE -> MA_PARM_BLDGUSE.BUSE_CODE
  • MA_BUILDINGS.SUBMODEL_CODE -> MA_PARM_SUBMODEL.SUBMODEL_CODE
  • MA_BUILDINGS.BLDG_MODEL_CODE -> MA_PARM_DRAWING.BLDG_MODEL_CODE MA_BUILDINGS.SUBMODEL_CODE -> MA_PARM_DRAWING.SUBMODEL_CODE
  • MA_BUILDINGS.BLDG_MODEL_CODE -> MA_PARM_SE_MODELS.BLDG_MODEL_CODE
  • MA_BLDG_AREA_YEAR. AREA_CODE-> MA_PARM_DRAWING.BLDG_AREA_CODE
  • MA_BUILDINGS.YEAR_ID -> MA_MODIF_STAMP.YEAR_ID

Parameter Tables

  • MA_TABLES.TABLE_CATEGORY = “bldg”
  • MA_PARM_MAROUND.ROUNDING_CODE = “bldg” for the building value
  • MA_PARM_MAROUND.ROUNDING_CODE = “area” for the areas (building dimensions)
  • MA_PARM_MAROUND.ROUNDING_CODE = “look” for the areas used in lookups

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

  • TOTAL_BASE
  • TOTAL_ACTUAL
  • TOTAL_EFFECTIVE
  • TOTAL_LIVING_AREA
  • TOTAL_HEATED
  • TOTAL_PERIMETER
  • TOTAL_RCN
  • TOTAL_RCNLD
  • TOTAL_VALUE
  • SITE_ADJ_TOTAL
  • NBHD_ADJ_TOTAL
  • FINAL_ADJ

Lookup Group
Many of the parameters used in the building 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
  • By jurisdiction AND property type

Look-up Group Example

We have a building record for the year 2015 with BLDG_USE_CODE = “45”. We want to get a BSE element which is defined in the table MA_PARM_SETAB where the table name is “EXTWALL” and the primary key contains the SE_CODE and LOOKUP_GROUP. We already have the YEAR_ID and the SE_CODE ( “45”) but now we need the lookup group.

Next, we go to the table MA_LOOKUP_GROUP and get all the records with TABLE_NAME=”EXTWALL”, YEAR_ID=2015 and CAMA_CODE=”45”. 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 land 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
The following information is required to use the lookup group:

  • Jurisdiction:Use PC_PARCEL.JURISDICTION based on MA_LAND.P_ID = PC_PARCEL.P_ID.
  • Neighborhood and Income neighborhood: Use PC_AREA.NBHD and PC_AREA.INC_NBHD based MA_LAND.P_ID = PC_AREA.P_ID and _MA_LAND.FROZEN_ID = PC_AREA.FROZEN_ID.
  • Property type: Use MA_PARM_BLDGUSE.PROPERTY_TYPE based on MA_BUILDINGS.BLDG_USE_CODE = MA_PARM_BLDGUSE.BUSE_CODE and MA_BUILDINGS.YEAR_ID = MA_PARM_BLDGUSE.YEAR_ID. If no information is found in MA_PARM_BLDGUSE 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.

 

Step 1 – Compute the areas

For each record in MA_BLDG_AREA_YEAR, based on the field BASE_AREA, using the percent values from MA_PARM_DRAWING (by searching with the AREA_CODE and lookup by MODEL/SUBMODEL if used):

a) Calculate the areas

Calculate the actual, effective, heated and perimeter area.

  • MA_BUILDINGS.TOTAL_BASE = the total of all MA_BLDG_AREA_YEAR.BASE_AREA

 

  • MA_BLDG_AREA_YEAR.EFFECTIVE_AREA = MA_BLDG_AREA_YEAR.BASE_AREA * Expression content [MA_PARM_DRAWING. EXPRESSION] * Expression content [MA_PARM_DRAWING.EFFECTIVE_EXPESSION] / 10000
    • If USE_METRIC we round to 1 decimal otherwise we round to 0 decimal

 

  • MA_BLDG_AREA_YEAR.ACTUAL_AREA = MA_BLDG_AREA_YEAR.BASE_AREA * Expression content [MA_PARM_DRAWING. EXPRESSION] / 100
    • If USE_METRIC we round to 1 decimal otherwise we round to 0 decimal. MA_BUILDINGS.TOTAL_ACTUAL = the total of all MA_BLDG_AREA_YEAR.ACTUAL_AREA

 

  • MA_BLDG_AREA_YEAR.LIVING_AREA = MA_BLDG_AREA_YEAR.ACTUAL_AREA
    • if MA_PARM_DRAWING.LIVING_AREA = -1 otherwise = 0
  • MA_BUILDINGS. TOTAL_LIVING _AREA = the total of all MA_BLDG_AREA_YEAR. LIVING _AREA
  • If EFFECTIVE_LIVING = “yes” then
    • MA_BUILDINGS.TOTAL_EFFECTIVE = the total of all MA_BLDG_AREA_YEAR. LIVING _AREA

 

  • MA_BLDG_AREA_YEAR.HEATED_AREA = MA_BLDG_AREA_YEAR.ACTUAL_AREA
    • if MA_PARM_DRAWING.HEATED = “yes” = MA_BLDG_AREA_YEAR.ACTUAL_AREA * MA_BLDG_AREA_YEAR.PERCENT_HEATED
    • if MA_PARM_DRAWING.HEATED = “partial” or = 0 if MA_PARM_DRAWING.HEATED = “no” MA_BUILDINGS. TOTAL_HEATED = the total of all MA_BLDG_AREA_YEAR. HEATED_AREA

 

  • MA_BUILDINGS. TOTAL_PERIMETER = the total of all MA_BLDG_AREA_YEAR. PERIMETER

 

b) Cumulate the building areas by type

This steps cumulates the areas by area type (i.e. Basement, Garage, Porch, 1st Floor … Attic, etc.). The Building Drawing Table Option By Area Type must be turned on where each drawing code can be associated to an area type. When none define, the Area Type ‘E’ Effective is used by default. When the Drawing Area Code Option Do not xxxx is turned on, the area is not added to the Effective or Area Type totals (i.e. for perimeter consideration only).

  • Cumulate the values in a collection by MA_PARM_DRAWING.AREA_TYPE (if NULL use the default ‘e’) if MA_PARM_DRAWING.EX_FROM_LOOKUP = 0 or NULL.
  • The collection is indexed by AREA_TYPE and contains the following variables:
    • TOTAL_EFFECTIVE = sum of all MA_BLDG_AREA_YEAR.EFFECTIVE_AREA per AREA_TYPE
    • TOTAL_FOR_LOOKUP = sum of all MA_BLDG_AREA_YEAR.EFFECTIVE_AREA per AREA_TYPE if USE_BASE_AREA_FOR_LOOKUP = “no” else sum of all MA_BLDG_AREA_YEAR.ACTUAL_AREA per AREA_TYPE if USE_BASE_AREA_FOR_LOOKUP = “yes”
    • TOTAL_RATE = 0 (will be use in the next steps)
    • TOTAL_VALUE = 0 (will be use in the next steps

c) Add the areas to TOTAL for Lookup
Cumulate the values of all TOTAL_FOR_LOOKUP into a variable GRAND_TOTAL_FOR_LOOKUP for use later in the compute.

Step 2 – Round and Update Areas

Round and update area fields in MA_BUILDING (see Rounding Table)

a) Rounding by Area type

  • Round each element of the collection created in step 1 for TOTAL_EFFECTIVE by using MA_PARM_MAROUND.ROUNDING_CODE = “area” and evaluating the Expression content [MA_PARM_ROUNDING.ROUND_TO_EXPESSION]. The rounding is performed by dividing TOTAL_EFFECTIVE by the ROUNDING_VALUE, by adding 0.4999999999999 if ROUND_UP_AREA = “yes”, by formatting the result to no decimal and then by multiplying back by the rounding value. If SQUARE_ROOT = “yes” then do a square root on TOTAL_EFFECTIVE.

b) Rounding by Total

  • Round each element of the collection created in step 1 for TOTAL_FOR_LOOKUP by using MA_PARM_MAROUND.ROUNDING_CODE = “look” and evaluating the Expression content [MA_PARM_ROUNDING.ROUND_TO_EXPESSION]. The rounding is performed by dividing TOTAL_FOR_LOOKUP by the ROUNDING_VALUE, by adding 0.4999999999999 if ROUND_UP_AREA = “yes”, by formatting the result to no decimal and then by multiplying back by the rounding value. If SQUARE_ROOT = “yes” then do a square root on TOTAL_FOR_LOOKUP.

c) Grand Total Rounding

  • Round GRAND_TOTAL_FOR_LOOKUP by using MA_PARM_MAROUND.ROUNDING_CODE = “look” and evaluating the Expression content [MA_PARM_ROUNDING.ROUND_TO_EXPESSION]. The rounding is performed by dividing TOTAL_EFFECTIVE by the ROUNDING_VALUE, by adding 0.4999999999999 if ROUND_UP_AREA = “yes”, by formatting the result to no decimal and then by multiplying back by the rounding value. If SQUARE_ROOT = “yes” then do a square root on GRAND_TOTAL_FOR_LOOKUP.

 

Step 3 – Get Initial Building Rate Information

Building Area Rate

Get Building Rate Setup
Check Rate Setup and get the initial rate from the building use code and the default property type. To do so, need to get one record from MA_TABLES for table_type = ‘bldguse’ to see if there is a lookup by:

  • bldg_model (field setab_use_model = -1)
  • submodel (field setab_submodel = -1)
  • units (field use_units = -1)

Get Property Type

  • PROPERTY_TYPE = MA_PARM_BLGUSE.PROPERTY_TYPE
  • If PROPERTY_TYPE is NULL then get the property type from PC_LEGAL_INFO.

Get Initial Rate
The rate is established by getting MA_PARM_BLGUSE or MA_PARM_BRATE if the units are used).
The rate will be associated with the TOTAL_RATE collection created in step 2 based on MA_PARM_SE_AREA.AREA_TYPE. If no records found, use ‘e’ (Effective area) as AREA_TYPE.
Fixed Rate

  • If MA_TABLES.USE_UNITS is False, then get the rate from MA_PARM_BLGUSE by searching with MA_BUILDINGS.BLDG_MODEL_CODE and with MA_BUILDINGS.SUBMODEL_CODE– depending on the lookup found above. The rate is evaluated from an expression and stored in TOTAL_RATE of every elements in the collection indexed by AREA_TYPE.

Rate by Unit

  • If the MA_TABLES. USE_UNITS is True, than get a pro-rated rate form MA_PARM_BRATE by searching with MA_BUILDINGS.BLDG_MODEL_CODE and with MA_BUILDINGS.SUBMODEL_CODE – depending on the lookup found above. The Up_to_units area information (TOTAL_FOR_LOOKUP) is prorated based on the collection indexed by AREA_TYPE (Up_to_units >= TOTAL_FOR_LOOKUP) AND the value of AREA_TYPE for each entry found in MA_PARM_SE_AREA . The rate is evaluated from an expression and stored in TOTAL_RATE for the selected elements in the collection indexed by AREA_TYPE.

 

Building Use Depreciation Table

We need to store the depreciation table and the maximum depreciation percentage into variables for use later in the depreciation step (step 18).

  • DEPR_TABLE = MA_PARM_BLGUSE.DEPR_TABLE.
  • MAX_ DEPR_PCT = MA_PARM_BLGUSE.MAX_ DEPR_PCT.

 

Building Rate by Area Units Example

When MA_TABLES. USE_UNITS is True
Collection contains:
AREA_TYPE TOTAL_FOR_LOOKUP TOTAL_RATE
b 1000 0
l 2000 0
MA_TABLES has:
TABLE_NAME COMPUTATION_SEQ SETAB_USE_MODEL SETAB_SUBMODEL SETAB_USE_UNITS
bldguse 0 0 0 -1
MA_PARM_SE_AREA has :
COMPUTATION_SEQ AREA_TYPE
0 b
0 l
MA_PARM_BRATE has:
BUSE_CODE UP_TO_UNITS RATE
ms0001a 1000 20.50
ms0001a 3000 18.50
ms0001a 9999999 10.00
The collection will contain:
AREA_TYPE TOTAL_FOR_LOOKUP TOTAL_RATE
b 1000 20.5
l 2000 19.5 (pro-rated)

Step 4 – Structural Elements Values Calculation

This step gets and calculates all building structural elements that apply.It computes or evaluates all the XXX_VA, XXX_V2 columns based on the corresponding value of XXX_CD.

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

Structural elements can be associated to:

  • Property type
  • SE models (based on the registry SE_BY_MODELS and SE_BY_MODELS_YEAR which determines the effective year)

Structural Elements in MA TABLE
Get all the structural elements records from MA_TABLE for the year, having TABLE_TYPE = ‘setab’ AND MA_TABLES.setab_rd_code <> ‘h’.

  • If they are associated to the SE models then join with the table MA_PARM_SE_MODELS and filter on MA_BUILDINGS.BLDG_MODEL_CODE,
  • if not then use PROPERTY_TYPE (Step 3) that match MA_TABLES.PROPERTY_TYPE or MA_TABLES.PROPERTY_TYPE = NULL.

Computation Sequence
The records will be ordered by COMPUTATION_SEQ.

* Use this set of records within the steps below *

Query Sample if Associated to SE Models

  • SELECT ma_tables.* FROM ma_tables, ma_parm_se_models WHERE ma_tables.year_id = ma_parm_se_models.year_id AND ma_tables.column_name = ma_parm_se_models.column_name AND ma_tables.computation_seq = ma_parm_se_models.computation_seq AND table_type = ‘setab’ AND setab_rd_code <> ‘h’ AND ma_tables.year_id = 2015 AND bldg_model_code = ‘ms0009’ ORDER BY ma_tables.computation_seq

 

MA Building Records Calculation

Each of the records will be treated separately, in order to find the value to be updated in MA_BUILDINGS for the corresponding XXX_VA field of the MA_TABLE.COLUMN_NAME, using the XXX_CD field value set in MA_BUILDINGS.

a) No Table Name

If there is no MA_TABLES.TABLE_NAME and the value into the corresponding _CD field is numeric, it will be transferred into the _VA field, otherwise XXX_VA is set to NULL.

b) No Table Name and Setab Col 11 = -1

If there is no MA_TABLES.TABLE_NAME and MA_TABLES.SETAB_COL_11 = -1 then XXX_V2 is set to NULL.
The next sub steps are only performed when there is a MA_TABLES.TABLE_NAME

c) Get MA_PARM_SETAB

Based on:

  • bldg_model_code (if MA_TABLES.setab_use_model = -1 – lookup by model)
  • submodel_code (if MA_TABLES.setab_submodel = -1 – lookup by submodel)
  • matrix_code (if MA_TABLES.setab_use_matrix = -1 – then retrieve another MA_TABLES record that will provide the MA_TABLES.COLUMN_NAME based on MA_TABLES.COMPUTATION_SEQ = MA_TABLES.setab_seq_pointer.
    • The matrix code value is found in MA_BUILDINGS.XXX_CD based on the retrieved MA_TABLES.COLUMN_NAME or in MA_BUILDINGS.XXX_VA if MA_TABLES.lookup_on_value = -1.
  • matrix_code2 (if MA_TABLES.setab_use_matrix = -1 – then use MA_TABLES.COMPUTATION_SEQ = MA_TABLES.setab_seq_pointer2.
  • matrix_code3 (if MA_TABLES.setab_use_matrix = -1 – then use MA_TABLES.COMPUTATION_SEQ = MA_TABLES.setab_seq_pointer3.
  • with up_to_units (if MA_TABLES.setab_area_lookup is set – lookup using the area collection, there are 3 area lookup types: a, p, t
    • ‘t’ (Grand Total) : use GRAND_TOTAL_FOR_LOOKUP
    • ‘a’ or ‘p’ : use the collection TOTAL_FOR_LOOKUP using AREA_TYPE = entry with the greater TOTAL_FOR_LOOKUP value in MA_PARM_se_area
    • ‘p’ : apply the percentage entered into the XXX_PC corresponding column in MA_BUILDINGS in order to reduce area if MA_TABLES.setab_col_3 = -1.
      • NOTE: If XXX_PC contains 50 then TOTAL_FOR_LOOKUP is 2000 then we use 1000 (50% of 2000).
      • Rates are always pro-rated between the UP_TO_UNITS as per example in step 3.

 

d) Evaluate MA_PARM_SETAB Expression

Evaluate the expression of MA_PARM_SETAB and store it in XXX_VA.

e) Rate Adjustment / Depreciation

If the Element Category of the record is Rate Adjustment (MA_TABLES.setab_rd_code = “r”)
AND there is a Depreciation Table set (field MA_PARM_SETAB.depr_table) then depreciation will be applied on the value (XXX_VA) as per below:

  • a. We get the DEPR_PCT
    • i. We determine the Appraisal base year APPR_BASE (registry DEPR_BASE_YEAR) using the current MA_TABLE.YEAR_ID
    • ii. MA_PARM_DEPR.TABLE_NAME = MA_PARM_SETAB.DEPR_TABLE
    • iii. We evaluate the MA_PARM_DEPR.NUMBER_OF_YEARS = FORMAT (APPR_BASE – MA_BUILDINGS.EYB to ‘000’). If negative we use 0. If MA_BUILDINGS.EYB is NULL we use MA_BUILDINGS.YEAR_BUILT.
    • iv. We evaluate the expression MA_PARM_DEPR.EXPRESSION
    • v. If MA_PARM_DEPR.EXPRESSION > MA_PARM_SETAB.max_depr_pct then the DEPR_PCT is MA_PARM_SETAB.max_depr_pct
  • b. We set the XXX_VA Value XXX_VA = XXX_VA * (100 – DEPR_PCT) / 100

 

f) Apply % to the Value

If a percentage is entered into the _PC corresponding column in MA_BUILDINGS (when MA_TABLES.setab_col_3 = “-1”) then apply the % (XXX_PC) to the value (XXX_VA).

g) Set MA_BUILDINGS.xxx_V2

If MA_TABLES.setab_col_11 = -1, Then
MA_BUILDINGS.XXX_V2″ = MA_PARM_SETAB.base_value.

Step 5 – Round and Compute Average

This step computes the average for all structural elements having equal consecutive MA_TABLE.TABLE_NAME with different MA_TABLE.COLUMN_NAME.
We exclude from this step all MA_TABLE.setab_col_3 = -1 or MA_TABLE.no_average = -1

  • Simply divide XXX_VA by the entry count and round to:
    • Case MA_TABLE.setab_rd_code
    • Case ‘q’ – IF QP_ROUNDING = ‘yes’ then round to QP_DECIMAL
    • Case ‘a’, ‘t’ – Round to CAMA_ADJ_DECIMAL
    • Case else Round to 2 digits.

If MA_TABLES.setab_col_11 = -1 Then perform the same logic for XXX_V2.

Example
MA_BUILDINGS
A1_VA= 16.445 A2_VA=20.555 A3_VA=2
MA_TABLES
COMPUTATION_SEQ TABLE_NAME COLUMN_NAME SETAB_COL_3
23 WALL A1 0
24 WALL A2 0
25 WALL A3 0
Results
A1_VA=16.445/3=5.48
A2_VA=20.555/3=6.85
A3_VA=2/3=0.67

Step 6 – Round and Compute Link

This step computes the linked values for all structural elements having MA_TABLES.setab_lk_pointer not NULL)

a) Loop in reverse order, from the last record to the first.
b) Depending on the field MA_TABLES.MATHS of each element having a link, its _VA field will be added, subtracted or multiplied to the _VA field of the linked computation sequence. For multiplication, if the MA_TABLES.PCT_AMT field is ‘p’ than the result will also be divided by 100 (Percent)
c) Set the value of XXX_VA to null
d) Case MA_TABLE.setab_rd_code

  • Case ‘q’ – IF QP_ROUNDING = ‘yes’ then round to QP_DECIMAL
  • Case ‘a’, ‘t’ then Round to CAMA_ADJ_DECIMAL
  • Case else then Round to 2 digits.

If MA_TABLES.setab_col_11 = -1 Then perform the same logic for XXX_V2.

Example
MA_BUILDINGS
A1_VA= 8 A2_VA=4
MA_TABLES
COMPUTATION_SEQ TABLE_NAME COLUMN_NAME MATH setab_lk_pointer (verify)
26 QUAL A1 X NULL
27 QMOD A2 + 27

A1_VA = 12
A2_VA = NULL

Step 7 – Adjust Areas

Scan the records of MA_TABLE and adjust the areas in the area collection (EFFECTIVE_AREA) for all entries MA_TABLES.setab_rd_code = “m”

Use the same logic as in STEP4 to select the MA_TABLES records.
Update the area collection (EFFECTIVE_AREA) by AREA_TYPE for all entries found in MA_PARM_se_area compute the EFFECTIVE_AREA collection.
if MA_PARM_se_area has no record found then use ‘e’.

  • Depending on MATHS, cumulate or multiply the value from column_VA to the EFFECTIVE_AREA collection based on MA_PARM_se_area .area_type
  • If the _V2 column is used, cumulate also the value from column_V2

 

Step 8 – Override Areas

Scan the records of MA_TABLE and override the areas in the area collection (EFFECTIVE_AREA) for all entries MA_TABLES.setab_rd_code = “s”

Use the same logic as in STEP4 to select the MA_TABLES records.
If MA_PARM_se_area has no record found then use ‘e’.

  • For all entries found in MA_PARM_SE_AREA move the XXX_VA to the corresponding EFFECTIVE_AREAcollection.

 

Step 9 – Adjust Rates

Scan the records of MA_TABLE and adjust the rates in the rate collection (TOTAL_RATE) for all entries MA_TABLES.setab_rd_code = “r” (VB6 : pv_scan_ma_table, pv_set_rate_tab)

Use the same logic as in STEP4 to select the MA_TABLES records.
Update the rate collection (TOTAL_RATE) by AREA_TYPE for all entries found in MA_PARM_se_area compute the TOTAL_RATEcollection.

  • if MA_PARM_se_area .AREA_TYPE = “e” (Effective Area) or no record found, then, depending on MATHS, cumulate or multiply the value from column_VA to all the areas within the collection, otherwise apply it only to the area_type corresponding to the area set in MA_PARM_se_area.

 

  • If the _V2 column is used, cumulate the value from column_V2Into a variable (grand_total_amount_adj_add) used below for CAMA adjustments.

 

Step 10 – Compute Size Adjustment

Compute the size adjustment variable (Govern for Windows: pv_compute_size_adjt).
A size adjustment is an adjustment to the rate based on the value of the TOTAL_EFFECTIVE collection.

Notes

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.

1. Get the MA_PARM_SIZEADJT entry for MA_BUILDINGS.BLDG_MODEL_CODE
2. If a record is not found then there is no size adjustment. Go to step 11.
3. If MA_PARM_SIZEADJT.SETAB_AREA_TYPE is NULL or = ‘e’ then we use MA_BUILDINGS.TOTAL_EFFECTIVE as the area value for the next sub steps, otherwise we use the TOTAL_EFFECTIVE collection item that match the area type. If the area value is 0 we go to step 11.
4. We evaluate the expression in MA_PARM_SIZEADJT.EXPRESSION and if the result is not zero then we set this value into MA_BUILDINGS.SIZE_ADJUSTMENTS and go to sub step 8.
5. if SIZE_ADJ_METHOD is Method 1 then the size adjustment is:

  • MA_BUILDINGS.SIZE_ADJUSTMENTS = ( MA_PARM_SIZEADJT.building_size * MA_PARM_SIZEADJT.land_bldg_ratio / area_value) + (1 – MA_PARM_SIZEADJT.land_bldg_ratio)
    • If MA_BUILDINGS.SIZE_ADJUSTMENTS < MA_PARM_SIZEADJT.MINIMUM_RATIO then we reset the size adjustment to the minimum.
    • If MA_BUILDINGS.SIZE_ADJUSTMENTS > MA_PARM_SIZEADJT.MAXIMUM_RATIO then we reset the size adjustment to the maximum.

6. if SIZE_ADJ_METHOD is Method 2 then the size adjustment is:

  • If the area value < MA_PARM_SIZEADJT.MINIMUM_RATIO then we reset the area value to the minimum.
  • If the area value > MA_PARM_SIZEADJT.MAXIMUM_RATIO then we reset the area value to the maximum.
  • MA_BUILDINGS.SIZE_ADJUSTMENTS = (area_value – MA_PARM_SIZEADJT.building_size) * MA_PARM_SIZEADJT.land_bldg_ratio

7. We round the size adjustments to the number of decimal positions as per the SIZE_ADJ_DECIMAL value.

8. If the size adjustment is for area type NULL or ‘e’ then we apply the following logic to ALL elements of the collection. If SIZE_ADJ_METHOD is Method 1 we multiply the rounded size adjustment by the rate found in the TOTAL_RATE collection for the current area_type. elseif SIZE_ADJ_METHOD is Method 2 we add the rounded size adjustment to the rate found in the TOTAL_RATE collection for the current area_type.

Step 11 – Compute Initial Value

In this step we compute an initial value for each items in the collection (VB6 : pv_compute_area_rate).

  • For each item in the area collection do TOTAL_VALUE = TOTAL_EFFECTIVE * TOTAL_RATE

 

Step 12 – Adjust the Total Value (CAMA Adjustment)

  • Scan the records of MA_TABLE and adjust the total value in the area collection (TOTAL_VALUE) for all entries MA_TABLES.setab_rd_code = “a”
  • Use the same logic as in STEP4 to select the MA_TABLES records.
  • If there are no records in MA_PARM_se_area or if MA_PARM_se_area.area_type = “e” then the adjustments are applied for all entries in the collection except for a Special Case (see below)
  • Depending on MATHS and PCT_AMT, cumulate or multiply the value from column_VA into the collection array TOTAL_VALUE.
  • If the _V2 column is used, cumulate also the value from column_V2into TOTAL_VALUE, independently of the MATHS.

Special Case:
If there are no records in MA_PARM_se_area OR if MA_PARM_se_area.area_type = “e”
AND also the MATHS is + or – and the PCT_AMT is ‘a’ (Amount), the adjustment will be applied only once, as following:

  • The value from column_VA will be cumulated into grand_total_amount_adj_add (and not into the collection array TOTAL_VALUE)
  • If the _V2 column is used, cumulate also the value from column_V2 into grand_total_amount_adj_add.

 

Step 13 – Compute the initial building value

The INITIAL_BLDG_VALUE is computed by adding all TOTAL_VALUE from the area collection.

  • Add grand_total_amount_adj_add (step 9) to INITIAL_BLDG_VALUE.

 

Step 14 – Compute the Quality Points

Quality points is a special type of adjustment that is a percentage that adjust the total value.
Scan the records of MA_TABLE for all entries MA_TABLES.setab_rd_code = “q”
Use the same logic as in STEP4 to select the MA_TABLES records.

  • Depending on MATHS (+ or – only), cumulate all the values of column_VA into MA_BUILDINGS.QUALITY_POINTS.
    • If MA_BUILDINGS.QUALITY_POINTS = 0 then set it to NULL and do not compute the adjustment below.

 

  • INITIAL_BLDG_VALUE = INITIAL_BLDG_VALUE * MA_BUILDINGS.QUALITY_POINTS / 100.

 

Step 15 – Compute Overall Adjustment

Overall adjustments are used to to modify the total value of a building according to user-defined criteria such as number of rooms or number

of fireplaces.

Scan the records of MA_TABLE and adjust the INITIAL_BLDG_VALUE for all entries MA_TABLES.setab_rd_code = “t”
Use the same logic as in STEP4 to select the MA_TABLES records.

  • Depending on MATHS and PCT_AMT, cumulate or multiply the value from column_VA into INITIAL_BLDG_VALUE.
  • If the _V2 column is used, cumulate also the value from column_V2into INITIAL_BLDG_VALUE, independently of the MATHS.

 

Step 16 – Compute the Effective Rate

The effective rate is calculated based on the building value divided by the area.

  • If SQUARE_ROOT = “yes” then
    • MA_BUILDINGS.effective_rate = INITIAL_BLDG_VALUE / Square root of (MA_BUILDINGS.total_effective)
  • Else
    • MA_BUILDINGS.effective_rate = INITIAL_BLDG_VALUE / MA_BUILDINGS.total_effective

Format the result to 2 decimal positions.

Step 17 – Compute RCN (Replacement Cost New)

The RCN value is the total value prior to depreciation.

  • If MA_BUILDINGS.nb_units > 1 then
    • MA_BUILDING.TOTAL_RCN = INITIAL_BLDG_VALUE * MA_BUILDINGS.nb_units
  • Else
    • MA_BUILDING.TOTAL_RCN = INITIAL_BLDG_VALUE.

Format the result to 0 decimal positions.

Step 18 – Get Depreciation

The goal of this step is to find the depreciation table to be used in step 19.

Scan the records of MA_TABLE for all depreciation types of structural elements.
Use the same logic as in STEP4 to select the MA_TABLES records.
The processing is specific to each Category MA_TABLES.setab_rd_code:

Depreciation (MA_TABLES.setab_rd_code = “d”)
Standard

  • DEPR_TABLE = MA_PARM_SETAB.DEPR_TABLE if not null and not set by type ‘e’.
  • MAX_ DEPR_PCT = MA_PARM_SETAB.MAX_ DEPR_PCT if not null.

Depreciation Override

  • If Depreciation Override (MA_TABLES.setab_rd_code = “o”), then:
    • MA_BUILDINGS.total_depr_pct = column_VA.
    • MA_BUILDINGS.total_RCNLD = MA_BUILDINGS.total_RCN * (100 -MA_BUILDINGS.total_depr_pct) / 100.
    • NOTE: There should be only one record with this Category, otherwise only the first value will used.

Format the result to 0 decimal positions.

    • Exit to step 21

Depreciation Table Override

  • If Depreciation Table Override (MA_TABLES.setab_rd_code = “e”), then
    • DEPR_TABLE = MA_PARM_SETAB.DEPR_TABLE if not null and not set by type ‘e’.

 

Step 19 – Compute Base Depreciation Percentage

The goal of this step is to compute the base depreciation percentage

We determine the Appraisal base year APPR_BASE (registry DEPR_BASE_YEAR) using the current MA_TABLE.YEAR_ID

  • MA_PARM_DEPR.TABLE_NAME = DEPR_TABLE
  • We evaluate the MA_PARM_DEPR.NUMBER_OF_YEARS = FORMAT (APPR_BASE – MA_BUILDINGS.EYB to ‘000’).
    • If negative we use 0. If MA_BUILDINGS.EYB is NULL we use MA_BUILDINGS.YEAR_BUILT.
  • We evaluate the expression MA_PARM_DEPR.EXPRESSION as DEPR_PCT

 

Step 20 – Adjust Depreciation

The goal of this step is to apply the depreciation adjustment,

Scan the records of MA_TABLE for the depreciation types ‘d’ of structural elements.
Use the same logic as in STEP4 to select the MA_TABLES records.
Depreciation (MA_TABLES.setab_rd_code = “d”)

  • If Non-Cumulative (MA_TABLES.no_cumulative = “-1”) keep the (column_VA) into an array called DEPR_ARRAY, to be applied later in this step.
    • NOTE: When the non-cumulative column is set, then PCT_AMT = ‘p’ and MATHS = ‘x’ (set by GNA), so we don’t need to check these values.
  • Otherwise
  • If MATHS = ‘x’ (Multiplier)
    • if the PCT_AMT = ‘a’ (Amount), multiply with the value: depr_pct = depr_pct * column_VA
    • if the PCT_AMT = ‘p’ (Percentage), multiply with the value and divide by 100: depr_pct = depr_pct * column_VA / 100
  • If MATHS = ‘+’ (Plus) OR ‘-’ (Minus). Add OR subtract the value from column_VA:
    • if the PCT_AMT = ‘a’ (Amount), add/subtract to the value:depr_pct = depr_pct +/- column_VA
    • if the PCT_AMT = ‘p’ (Percentage), add/subtract to the value and divide by 100: depr_pct = depr_pct +/- (DEPR_PCT * column_VA / 100)

Once all code processed compute the non-cumulative depreciations

NON_DEPR_AMOUNT = MA_BUILDINGS.total_RCN * (100 – depr_pct) / 100.

For each element of the DEPR_ARRAY

  • NON_DEPR_AMOUNT = NON_DEPR_AMOUNT – (NON_DEPR_AMOUNT * DEPR_ARRAY(x) / 100)

MA_BUILDINGS.total_depr_pct = 100 – (NON_DEPR_AMOUNT * 100 / MA_BUILDINGS.total_RCN) formatted to 2 decimal positions.
MA_BUILDINGS.total_RCNLD = NON_DEPR_AMOUNT formatted to 0 decimals.
MA_ BUILDINGS.TOTAL_VALUE = NON_DEPR_AMOUNT formatted to 0 decimals.

Step 21 – Compute Site Adjustment

Compute Site Adjustment MA_BUILDINGS.SITE_ADJ_TOTAL
See the site adjustment computation specs document. We will have to decide whether or not we call the site object before completing this step.

Site adjustment is based on the value of MA_BUILDINGS.SITE_NO and should be skipped if NULL (Should not occur as site is mandatory in 6.1)
The total site adjustment cannot produce a negative value if Allow_Negative_Value=False.

The adjustment (MA_BUILDINGS.SITE_ADJ_TOTAL) is calculated as (MA_BUILDINGS.total_RCNLD * MA_SITE.ADJ_BLDG_PERCENT / 100) + MA_SITE.ADJ_BLDG_AMOUNT.

The site adjustment is added to the MA_ BUILDINGS.TOTAL_VALUE.

Step 22 – Compute Neighborhood Adjustment

Compute Neighborhood Adjustment in MA_ BUILDINGS.NBHD_ADJ_TOTAL.
Property Type
The Neighborhood adjustment (MA_PARM_NBHD) is based on the property type (see the section on property type at the beginning of this document).
If NULL and PROPERTY_TYPE_FROM_PC_LEGAL = “yes” then we define the property type as PC_LEGAL_INFO.PROPERTY_TYPE.
IF no record found for a given property type then we search the MA_PARM_NBHD table with a blank property type (15 spaces).
Adjustment

  • The adjustment (MA_BUILDINGS.NBHD_ADJ_TOTAL) is calculated as (MA_BUILDINGS.TOTAL_VALUE * evaluated expression MA_PARM_NBHD.BLDG_EXPRESSION / 100)
  • The nbhd adjustment is added to the MA_ BUILDINGS.TOTAL_VALUE. This value cannot produce a negative value if Allow_Negative_Value=False.

 

Step 23 – Compute Global Adjustment

The goal of this step is to apply a global adjustment. This is an adjustment that is applied after the depreciation is calculated.

Scan the records of MA_TABLE for the global adjustments types ‘g’ of structural elements
Use the same logic as in STEP4 to select the MA_TABLES records.

Read all Global adjustments (MA_TABLES.setab_rd_code = “g”) and for each record:

  • Note: The type ‘g’ only support PCT_AMT = ‘p’ and MATHS = ‘x’ (set by GNA), so we don’t need to check these values.

If no records are found then continue to step 24.

Once all records ‘g’ are read:

  • MA_BUILDINGS.TOTAL_VALUE = MAF_VALUE

 

Step 24 – Compute Final Adjustment

The goal of this step is to calculate the final adjustment

The final adjustment is calculated only if MA_BUILDINGS.FINAL_ADJ_PERCENT is not NULL.

    • Note: A value of zero reset both the final_adj and final_adj_percent to NULL

 

  • MA_BUILDINGS.FINAL_ADJ = MA_BUILDINGS.TOTAL_VALUE * MA_BUILDINGS.FINAL_ADJ_PERCENT / 100

 

  • MA_BUILDINGS.TOTAL_VALUE = MA_BUILDINGS.TOTAL_VALUE + MA_BUILDINGS.FINAL_ADJ.

 

Step 25 – Compute the Final Rounded Value

The goal of this step is to compute the final rounded value.

  • MA_BUILDINGS.TOTAL_VALUE is rounded based on the MA_PARM_MAROUND information (code = ‘bldg’).

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.

Step 26 – Set the Modification Stamp

The goal of this step is to identify that the building value has been computed.

  • MA_BUILDINGS.MODIF_STAMP = MA_MODIF_STAMP.BLDG_STAMP if not null, otherwise we use the current date/time.

 

 

101-ma-compute-Bldg

 

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 – Sales

Mass Appraisal (MA) Sales

Overview

Comparable Sales and Sales Analysis

In Sales Analysis, existing sales records are used to derive statistics, such as median sale price, mean sale price, standard deviation, etc., and to create a ratio to validate the valuation model used in the jurisdiction (Sale Price to Appraised Value). Comparable Sales Methodology uses qualified sales to estimate the most probable price that a parcel would bring. Because an estimate always has some degree of subjectivity and can never be 100% accurate, the appraisal data must be as thorough and as accurate as possible in order to make a fair prediction of the comparable value.

In the comparable sales process, the value of a subject parcel is estimated by comparing it to a group of selected parcels that are not identical but are as similar as possible in as many aspects as possible. Three indexes are used in order to make the estimate, the Selection Index, the Adjustment Index, and the Comparable Index.

Comparable Sales Process

The comparable sales process can be divided into the following steps:

  • Building a Qualified Sales Sample
  • Calculate Adjustment Values
  • Compute and Sort the Qualified Sales Sample
  • Calculate the Comparable Sales Value

 

Build a Qualified Sales Sample

The first step in the Comparable Sales process is to build a qualified sales sample. In this step, a number of recently sold parcels are selected for a sales sample on the basis of similarity to the subject parcel. The criteria for determining similarity are user-defined but generally include the neighborhood, the building model or style, and the number of bedrooms. The parcels considered for selection typically meet some of the criteria but not all, as it is rarely possible to find two parcels that are the same in all aspects. For example, a selected parcel may be built in the same style as the subject parcel but have a different number of bedrooms, or be located in a different neighborhood. These types of differences are compensated for by the use of a Selection Index.

The Selection Index is used to select qualified parcels for a comparison. A number is added to the selection index for each aspect of the selected parcel that is different from the subject parcel. This number is defined by the organization and is based on the appraiser’s judgment. A number could be added to the selection index for the neighborhood, as follows. If the neighborhood of the selected parcel is different from the subject parcel but the two neighborhoods have the same market conditions, a low number is added to the index. If the two neighborhoods have very different conditions, a high number is added to the index. A lower selection index always indicates that a parcel is more comparable.

In Govern Admin, you can set the program to reject the parcels with a selection index that is greater than a specific value, as these would be too different to qualify as comparable. The parcels that have an index within a certain range can be used to form the qualified sales sample.

Calculate Adjustment Values

NOTE: In this version of Govern, the adjustments are not calculated. The Comparable Sales is made using the Selection Index only.

The second step of the Comparable Sales process is to calculate the Adjustment values. In this step, the sale prices of the parcels from the qualified sales sample are adjusted in relation to the subject parcel. For example, all else being equal, a smaller parcel would sell for less. If the area of the selected parcel is 2,500 square feet and that of the subject parcel is 2,000 square feet, the subject parcel would sell for less. To compensate for this, the program subtracts an amount from the sale price of the selected parcel. If the overall quality of the selected parcel is not as high as the subject parcel, the subject parcel would sell for more. In this case, an amount is added to the sale price of the selected parcel.

In addition to the actual dollar value of the total adjustments made on a parcel, the number of adjustments must be considered. A parcel with a low total adjustment value may actually be less comparable than a parcel with a higher adjustment value. For example, a parcel may have a negative adjustment of $10,000 due to its size and a positive adjustment of $10,000 for its overall quality. These adjustments would cancel each other out and the total adjustment would be $0. Another parcel with a single positive adjustment of $5,000 would actually be more comparable but have a higher total adjustment value. To compensate for this discrepancy, an Adjustment Index is used.

Using the Adjustment Index, the absolute value of the adjustment is measured, as is the value of the adjustment in relation to total value of the building. For example, as a $10,000 adjustment has a greater impact on a $100,000 parcel than on a $250,000 parcel.

To compute the adjustment, the absolute value, i.e., the value without a positive or negative consideration, of each adjustment is added. The total value is divided by the actual sale price. This result is multiplied by 100.

For example, if the parcels in the preceding example sold for $250,000 each, the adjustments would be calculated as follows:

 

Values Parcel A Parcel B
Adjustment 1 (10,000)* 0
Adjustment 2 10,000 5,000
Total of Adjustments 20,000 5,000
Sale Price in dollars 250,000 250,000
Adjustment Index    
(Total of Adjustments) / (Sale Price) * 100 20,000 / 250,000 = 0.08 * 100 = 8 5,000 / 250,000 = 0.02 * 100 = 2

 

Compute and Sort the Qualified Sales Sample

Computing and sorting the Qualified Sales sample is the next step in the Comparable Sales process. In this step, the Comparable Index is used to compute and sort the qualified sale sample. The comparable index is computed for each parcel by adding the Selection Index to the Adjustment Index. The parcel with the lowest comparable index has the lowest index.

Calculate the Comparable Sales Value

Calculating the comparable sales value is the fourth step of the comparable sales process. In this step, the weighted sales of all the selected parcels are calculated in order to determine the comparable sales value of the subject parcel. Before this step can occur, the number of qualified sales must be greater than or equal to the minimum defined in the administrative setup. A maximum number is also defined. In the following example, three parcels are selected for the qualified sales sample.

Ideally, all parcels would be fully comparable with a comparable index of 0. The comparable value would be an average of all adjusted sale values. As this would almost certainly never occur, it is important to ensure that the most comparable parcels get a greater weight than the parcels that have had more adjustments added and are less comparable. This increases the accuracy of the projection.

A weighted mean is applied to each adjusted sale value that is proportionally the inverse of the comparable index. More weight is given to the adjusted value when the index is lower.

To be more accurate in its projection, Govern evaluates the weight relative to the other sales in the sample. Using this technique, a comparable sales index of two and one of eight may get different weights if a third sale has an index of 10 versus an index of 20.

Using the comparative index, the weighted sales are calculated by dividing the sum of the comparable sales indexes by the comparable sales index for each parcel.

The result obtained from this operation for each individual parcel is divided by the sum of all the results.

The ratio obtained for each parcel is multiplied by the adjusted sales value. Each result is added to obtain the final comparable sale value for the subject parcel.

These steps are presented in the following table. This table uses three example parcels with simplified values.

  Parcel 1 Parcel 2 Parcel 3
Comparable Sales Index per Parcel (Selection Index + Adjustment Index) 4 8 12
Adjusted Sale Value $150,000.00 $130,000.00 $180,000.00
Total Comparable Sales Index for all Parcels Sum is 4+ 8+ 12 = 24
Weighted Sales (Total Comparable Sales Index)/(Comparable Sales Index per Parcel) 24/4 = 6 24/8 = 3 2 24/12 = 2
Sum of Weighted Sales Sum is 6 + 3 + 2 =11

Weighted Sales Ratio

Sum of Weighted Sales / Weighted
Sales per Parcel

6/11 or 0.55 3/11 or 0.27 2/11 or 0.18

Weighted Sales Value

Adjusted Sales Value / Weighted Sales Ratio

($150,000 X .55) ($130,000 X .27) ($180,000 X .18)
Sum of Weighted Sales ($150,000 X .55) + ($130,000 X .27) + ($180,000 X .18) = ($82,500) + ($35,100) + ($32,400) = $150,000

The ratio obtained for each parcel is multiplied by the adjusted sales value and the total of each result is added to obtain the final comparable sale value for
the subject parcel. ($150,000 X .55) + ($130,000 * .27) + ($180,000 * .18) = $150,000.

Related Topics

 

 

 

101-ma-frm-015

 

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