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.
![]() |
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.
![]() |
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
- then
- then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 1 and MA_MASTER.METHOD_IN_USE = “1”, “6”, “L”
- 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
- then
- then If MA_MASTER.EXCLUDE_FROM_ROLL <> -1 and <> 1 and MA_MASTER.METHOD_IN_USE = “7”
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
- then
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
- then
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
- then
- 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
- then
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
- then
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
- then
-
-
- 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
- then
- If 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