Skip to content

Prophet Profesional (PP)


Prophet Professional is the desktop platform. It is an integrated suite of actuarial system used primarily by insurance companies to perform actuarial calculations including profit testing, projections, statutory valuations, asset liability modeling, stochastic modeling and risk management.

UpdateBulletinLicensingBest Practice
Below is the summary of Prophet Professional updates in each release.

Year Key Features
2021 Prophet Professional 2021 Q2

  • Diagnostic Files
    • Improvements to the Product/Module diagnostics file have been made
    • Improvements to the Runtime diagnostics file have been made
    • Extended formula diagnostic files have been introduced
    • Structure diagnostic files have been introduced
  • Flexible Results
    • The ability to calculate aggregation results in a dynamic run has been introduced
    • A new Flexible Results API feature is available which allows the user to obtain the metadata
  • Calculation Engine
    • Reduction in the time taken to recalculate in-memory dynamic products for module links that don’t vary dynamically. Module links will now be determined to be pre-decision where possible
    • Module input sources can now be defined to take the value from a specified time-period
    • Goal seeking loops are now pre-decision by default
    • New functionality has been added to Intex to support snapshotting and restoring PAY_TO_PAY calculations
2020 Prophet Professional 2020 Q2

  • Flexible Results
    • To address reporting challenges like IFRS 17 and US GAAP LDTI, a new results type has been created. Aggregation results allow you to group projection results by user-defined model point variables. This is in addition to the standard projection results grouped by SPCODE.
    • The products and variables that aggregation results are produced for are specified in a new workspace object, removing any interdependency on other results written by your run
    • Once produced, aggregation results can be read into your Prophet model via a new AGG_PROJ_RESULT function
    • Individual policy results, the ability to produce a limited number of policy level projection results, have been made available to a wider audience
    • A new Flexible Results API is available which allows programmatic direct access to Prophet Results including the new aggregation results
  • Calculation engine enhancements
    • Module outputs can be used directly as another module’s input sources
    • Table and model point optimisation now available for products containing modules
    • Constant variable optimisations enhanced for modules and products containing modules
    • Rebase loop separation from goal-seeking loop is now possible in some situations in order to reduce unnecessary recalculation of rebase loop variables and their precedents
2019 Prophet Professional 2019 Q2

  • Looped modules
    • Ability to perform loops around modules
    • Enhancements to the module inputs and outputs
    • A new variable definition type called Extended Module Input has been introduced facilitating the transfer of extended formula values between product and module
    • Potential to parallelise calculations and to improve performance with support for Advanced Vector Extensions (AVX)
  • Results changes
    • To facilitate the Flexible Results changes, result file formats have been enhanced
    • Slight change to results querying methodology
  • Enhancement to split by model point batches
    • Ability to specify number of model points per batch
  • Enhancement to new licensing technology
    • Proxy server support
    • Increased support for non-Roman characters
    • Client Licence Server usage improvements

Note: From this release we no longer support 32-bit compilation of Prophet code and calculations need to be performed using the 64-bit runtime architecture. Infrastructure that only supports 32-bit will not be able to be used with Prophet Release 2019 Q2.


2018 Prophet Professional 2018 Q3

  • Improved licensing technology
    • Written and controlled by FIS – simpler installations, better integration to Prophet
    • New and replacement licenses issued more quickly
    • User-based licensing
    • Improved licensing for virtualized environments
  • User-Defined Functions
    • Reusable code defined by users
    • Accessible from standard and extended formulae
    • Can be used multiple times by a product
    • Can be imported between libraries and workspaces
  • Nested Structures enhancements
    • Introduction of save point compare functionality to help understand the source of differences or unexpected results
    • Improved comparisons of data to help understand changes between dynamic loops
    • Improved manipulation of data in table and model point maps
  • Backup and Restore
    • Redesigned to give a better user experience
    • More granular choice as to what to include in the backup or restored workspace
    • Metadata included such as who created the backup and when it was created
2017 Prophet Professional 9.0.4

  • Nested Structures Enhancements
    • Structure link skipping
    • Dynamic Loop at Start and End support
    • Other Nested Structures enhancments
  • Modules Enhancements
    • Conditional Module Links
    • Other Modules enhancements
  • Compare
    • Run settings
    • Structures
    • Structure links

DCS 9.0.4

  • New functions added
  • Generic table functions now support absolute file paths
  • Options diaglog improved
  • Debugger enhancements
2016 Prophet Professional 9.0.3

  • Nested Structures enhancements
  • Modules enhancements
  • Ability to use modules within a nested structure

DCS 9.0.3

  • OUTPUT_ARRAY_AS_CONSTANTS enhancements
  • Significant increase to DCS limits
  • Improved table creation
Prophet Professional 9.0.2

  • Modules – an extension to Nested Structures, allowing multiple business projections to be included within another model, for example multiple reserving basis.
  • Flexible Tables – enabling users to change the indices of their actuarial assumption tables between runs without updating their models.
  • Split by Model Point Batches – allows Prophet Enterprise customers to distribute large deterministic models across multiple machines more efficiently.
  • Auditor Pack – a new installation available for auditors. It contains an installation of the various reporting tools including Excel Reporting, Diagram View and Queries.
  • Books – a new library feature to allow FIS to organise the variables in a library into different groups and distribute code to licenced users. The code within a book can be delivered as part of a vendor maintained solution.
  • API Enhancements – The API has been enhanced to provide additional product and accumulation manipulation such as the ability to create accumulations and Same-As products as well as deleting a product.

DCS 9.0.2

  • Copying of input and output formats
  • Nested Structures Grouping Improvements
2015 Prophet Professional 9.0.1

  • Nested Structures – ability to perform runs split across outer and inner products
  • Nested Structures – enhanced the ability to perform runs split across outer and inner simulations
  • Nested Structures – group the model points being passed to the inner with the ability to call a DCS script between outer and inner structures
  • Nested Structures – enhancements to READ_NESTED_STAT functionality
  • Nested Structures – enhancements to SCENARIO_SELECTED functionality
  • Nested Structures – ability to pass normal Prophet Array variables into the inner structure via table maps
  • In Memory Dynamic – Improved memory usage and option to reduce further with new optimisations

DCS 9.0.1

  • DCS Plugins
  • Nested Structures – Grouping model points using DCS during a Prophet run
Prophet Professional 9.0

  • Nested Structures – Link runs together to mimic the interaction between departments
  • An updated User Interface for Prophet Professional
  • Support for 64 Bit Excel

DCS 9.0

  • Improved rounding tolerances
  • New functions
2014 Prophet Professional 8.2.3

  • Easier deployment of Prophet Libraries and workspaces
  • Support for the new General Insurance Solution
  • Enumeration descriptions within tables
  • Further improvements to the find and search
  • Improved preparation performance for models containing large numbers of arrays Prophet Solution

DCS 8.2.3

  • Improved debugger, including conditional breakpoints
  • Improved saving functionality
Prophet Professional 8.2.2

  • Greater freedom for product and accumulation names
  • Changes to linking products and libraries – the product name no longer needs to begin with the same letter as the library it uses
  • New docking features have been added
  • The Find and Replace functionality has been improved
  • The Code Editor has new auto-complete and auto-indentation features
  • The Calculation Engine has been improved to optimise performance
  • The user interfaces for Prophet Viewer, External Diagram View, Run Monitor and Structures have been updated

DCS 8.2.2

  • Improved debugger, including 64-bit architecture support
  • Input format functionality enhancements, including Populate function for dates and changes to the logic used on formatted input data
  • Runtime improvments, including changes to the compile flags and improved memory usage and sorting for Minimum Grouping runs
  • The DCS Viewer user interface has been refreshed to use the new Windows style of ribbons and tabs rather than menus
2013 Prophet Professional 8.2.1

  • Prophet Excel Reporting
Prophet Professional 8.2

  • Prophet User Interface
  • Prophet Diagram View
  • Right Click Options
  • Prophet Run Settings – Validate Table Locations
  • Prophet Excel Reporting
  • Prophet API
  • Prophet QA
  • Prophet Results Database

DCS 8.2

  • Data Conversion System
  • Main Enhancements and other changes
  • 64 bit Runtime Architecture
  • EBCDIC Data Support
  • Other Development Enhancements
2012 Prophet Professional 8.1.1

  • Single File Run Logs
  • Restricting number of local cores
  • Prophet Options
  • Prophet Logging
  • Diagram View
  • Enumerations
  • Table of Tables
  • Debugger
  • Prophet Results Database
  • Modified By and When
  • Accumulating Stochastic Results
  • DIM_SIZE
  • Compiler Support
  • Other Development Enhancements
Prophet Professional 8.1

  • Prophet Queries
  • Prophet Queries for Excel Reporting
  • Excel Reporting
  • Enumerations
  • Table of Tables
  • Switch
  • PQA
  • Documentation
  • Workspace Size
  • Prophet Results Database
  • Prophet Licence Manager
  • Save Settings
  • Individual Model Point Output
  • Excel templates
  • Array Initialise
  • Diagnostic file
  • Multi-Edit
  • FacStoConveter
  • Tables with different time steps
  • Segment Tables
  • Shortcuts
  • Compiler Support
  • Other Development Enhancements
  • Other Calculation/Result Enhancements

DCS 8.1

  • A new fluent user interface
  • Improved security
  • Debugger
  • New code editor
  • Consistent look and feel with Prophet Professional 8
  • Automation
2011 Prophet Professional 8.0.2

  • Prophet QA
  • Prophet Licence Manager
  • Performance Enhancements
  • Non Global Arrays
  • Push to Prophet Enterprise
  • Intel Compiler support
  • Excel templates
  • Debugger Enhancements
  • Installation Enhancements
  • Other Data / Input Enhancements
  • Other Development Enhancements
  • Other Calculation/Result Enhancements
2010 Prophet Professional 8.0.1

  • Debugger
  • API
  • Office 2010
  • Windows 7
  • Compilers
  • Firebird
  • Stochastic Summary
Prophet Professional 8.0

  • A new User Interface
  • A new 64-bit Calculation Engine
  • Improved Security
  • Manual Intervention reduced
Before 2010 Prophet Professional 7.3
The enhancements and addressed issues in each release of Prophet Professional are summarized as below.

Release Enhancement Addressed Issue
2020 Q2 Flexible Results
Aggregation results
With Release 2020 Q2 Service Pack 3, for Flexible Results users we have introduced aggregation results as a new results type.

For those with a valid licence, aggregation results enable you to generate projection results aggregated by a model point variable of your choosing, called the aggregation variable. Aggregation projection results can be created for up to two aggregation variables per product in addition to the existing sub-product aggregation functionality in standard projection results.

With the effective date of IFRS 17 and US GAAP LDTI approaching, aggregation results have been designed to help companies report across different groups of insurance contracts. They provide a simplified method of summing values across multiple model points in a contract group by reducing code and can result in faster runtimes.

To facilitate this new results type, a new Aggregation Results Definition workspace object has been created. This workspace object, which you later include in the Results section of the run setting, is where you define the variable that your new results type will be indexed by (the aggregation variable), the products for which the results should be generated and the variables that you will get in your aggregation results output.

The aggregation variable can be a number or text data type, making it more versatile than the SPCODE grouping for standard projection results. The new results definition can also be created, edited and added to your run via the API.

Aggregation results can be viewed directly in Prophet Professional, Results Diagram View, Results Viewer and with Excel Reporting through a new AGG_PROJ_RESULT function. As well as the Excel Reporting function, a Prophet runtime function by the same name is available to read aggregation results from another run.

For this first release, aggregation results are not supported for stochastic and dynamic processing. They will also only be produced in conjunction with the New Business in Model Point File new business method.

Individual policy results
Individual policy results, previously only available to clients with a Production Interface licence, are now also available to users licensed for Flexible Results. Individual policy results allow you to create projection or stochastic output for specified policies in your model point file, up to a 100 policy limit. Note this differs from individual model point output which is for all model points and can only be produced for up to two time periods.

The specification of these results adopts a similar approach to aggregation results, via a workspace object which can then be referenced by multiple run settings. Individual policy results can also be set up via the API, read via the POLICY_RESULT Excel Reporting function and viewed directly in Prophet Professional, Results Diagram View and Results Viewer.

Flexible Results API
The Flexible Results API (FR API) is a .NET Dynamic Linked Library (DLL) that can be used by a bespoke application to read Prophet results directly and at scale, which can then be transformed and stored as appropriate. This removes the need to use the Prophet Results Database (PRD) for transient data storage.

The Insurance Data Repository (IDR) now uses FR API as an alternative data source with minimal changes to any existing jobs that were using PRD as a data source. This can reduce the time taken to load results data from the filesystem into IDR, as well as reducing storage needs.

Calculation engine enhancements
In Release 2020 Q2 Service Pack 3 we have made several large improvements to the calculation engine, with a major area of focus being the performance of products containing modules:

  • Table and model point optimisations (TMPO), a Prophet Enterprise licensed optimisation, has now been made available for use with products using modules. This means Prophet can use details from the tables that will be used during a run, in order to determine additional optimisations that can be made. For example, replacing a table read in the product or module with a constant value if possible, reducing time reading this value during the run and allowing additional optimisations to be carried out using this constant.
  • Module inputs have now been enhanced to allow members of a module link to be directly used as an input source, of another module link in the same product, without using a product variable as an intermediary. This reduces the need to declare and maintain intermediary variables in the parent product of the module links purely for the purpose of passing information between module links, and potentially allows the engine to reduce the storage needed and amount of data being transferred in memory.
  • It is often possible to do optimisations in Prophet based on whether a variable is constant or not. Values that have been defined as constants by a user, as well as variables that are determined to be constant at the preparation stage (when using TMPO), can now be shared across the product-module boundary; previously a constant module link input source would not cause the input to be optimised as a constant inside the module link and constants in the module links would not cause the product to be further optimised. The use of constants during the preparation of a product or module allows for optimisations, such as removing branches of IF conditions and reducing time periods calculated/stored, to be made in order to reduce calculations carried out downstream from the constants and reduce the storage required for variables that are always constant. By sharing constants between the products and the modules, more of these optimisations can be carried out.
  • Using the Fast runtime or Fast compile setting in the run structure respectively, you are now able to choose to prepare module code for every product-module link pair or for every product-module pair. This option allows for module code optimisations that improve runtime to be carried out without the restrictions imposed by code being shared between every module link limiting them. However, preparation may now take longer when using the fast runtime setting.
  • In previous releases, in all cases, the rebase loop must be contained within the calculation loop, and these loops must be contained with the goal-seek loop. In Release 2020 Q2 Service Pack 3 we have altered this behaviour to allow the rebasing and goal-seeking loops to be separated. This is possible where only rebasing and goal-seeking are used and the rebase loop can be determined to be entirely after the goal-seek loop. This change allows for a, potentially significant, reduction in the recalculation of rebasing variables that no longer need to be included in the goal-seek loop.
  • The ADCo plugin SET_RATES function now supports IndexForecast and HPIForecast for the RateName argument.

User Interface enhancements
In Release 2020 Q2 Service Pack 3 we have made a number of improvements across several parts of the user interface.
Enhancements to libraries

  • A new variable category can be created automatically when a variable is assigned to that category.
  • The indicator expression limit has been increased from 240 characters to 500 characters.
  • A column called Returns Array has been added to the User Defined Functions tab of an open library. This is to quickly show whether a user defined function returns an array or not.
  • You can now see who last modified a book. This information is available in the Modified By field in either the Book dialog box or Books tab of a library.
  • Multiple core variables can be deleted from a library using one click.

Enhancements to comparison

  • Importing user defined functions from a library comparison has been enabled.
  • If you are comparing an object in one workspace to that in another workspace then “Prophet.prw” no longer needs to be added to the workspace location file path.

Enhancements to viewing results

  • The results grid now copes better with larger sets of results by reducing the amount of memory it needs to allocate on opening.
  • The Suppress Zeros setting is remembered after re-opening the results.

Enhancement to backup and restore

  • When restoring a backed-up workspace, the file size of the items once restored can now be seen in the Restore dialog box.

Prophet Professional Application Programming Interface (API)
In Release 2020 Q2 Service Pack 3 we have made following improvements to the PP API:

  • A new function is available to obtain dynamic debug results.
  • A warning message relating to missing compilers has been added when a user submits a run.

Licensing
The following improvement has been made to the licensing technology which was released as part of Prophet Release 2018 Q3:

  • In the Client Licence Server (CLS) portal, a new label Available CLS Instances (as of last synchronisation) has been added so that it is clear if the CLS instance is ready for disaster recovery.
Prophet Professional 2020 Q2 Service Pack 3

  • An inefficiency with the READ_RESULTS function was introduced in Release 2019 Q2 where the Calculation Engine (CE) checked the results frequently to identify whether a requested result was part of a product or accumulation. This involved checking whether the requested product or accumulation was part of the currently executing run pair, and if not, checking whether it was part of the pre-existing workspace results, which is relatively expensive in terms of run time. Performing this check repeatedly for every READ_RESULTS call could significantly impact the runtime of products using lots of READ_RESULTS calls, for example Summary library products. If the workspace was located on a remote location to the worker(s) then the performance impact could be more adverse. This issue affected models where a lot of products and accumulations results being accessed were either missing or not part of the current run pair. This issue has now been fixed.
  • In previous versions, on the Prophet tab of the ribbon in Excel, if you clicked Options and then cleared the default selection of Show Variable Errors, an “unset nullable” error was returned instead of zero. This issue has now been resolved.
  • This update fixes two threading issues in the Prophet 2020 Q2 Calculation Engine, that affect Parallel Model Point Processing (PMPP):
    1. If using PMPP and READ_FLEXIBLE_TABLE it is possible to get a putResults error of the type “concurrent or recursive” calls.
    2. If using PMPP and modules it is possible to get a structured exception when two DLLs both try to load the same table at the same time. Depending on whether fast runtime or fast compile is used in the structure, or whether a module link is set to be looped, a DLL may represent a single module shared amongst module links in the same product or individual module links.

  • Note: It is recommended that users apply this update if they are using PMPP.


  • Earlier in this bulletin, as part of the 2020 Q2 release, we discussed the introduction of the ability to prepare module code for every product-module link pair or every product-module pair. This was directly linked to the choice of the Fast runtime or Fast compile setting respectively. The use of product-module link pair with fast runtime caused the preparation of some models with lots of module links to be adversely affected. In Service Pack 3 we have made a number of changes to correct this. Fast runtime users can now choose whether to prepare based on the module or the module link. This is done through a check box on the module link form. Note that by default this option is hidden and switched off; users can make it visible under the Prophet Options menu. The fast compile option was not affected and remains unchanged.
  • An introduced issue has been fixed whereby t-limiting information was not passed properly between module and product when using array variables and rebasing.
  • An issue caused by targeting with rebasing and modules has been fixed. This issue could affect results due to variables being put in different positions in the rebase loop.
  • An issue that meant aggregation results models containing extended formula variables would occasionally fail has been fixed.

Prophet Professional 2020 Q2
User interface

  • An issue saving extended formula definitions that had over 200,000 characters has been fixed.
  • An issue saving definitions instantiating a parameterised extended formula has been fixed.
  • An “out of memory” error caused by a problem in the logic used by Diagram View and formula auto-complete has been fixed.
  • Previously for a run setting comparison, comparing a non-blank entry to a blank entry was not treated as a difference. This has been corrected to report a difference in the comparison.
  • It is now possible to import indicators from a library comparison.
  • An issue with copying and pasting the module link grid into Microsoft Excel or text files has been resolved. Users can use shortcut keys to copy and paste the whole grid with headings.
  • A bug preventing you from changing the mortality tables location in the Prophet Professional Options dialog has been fixed.
  • An issue that meant you were unable to view individual binary model point results in Prophet Viewer has been fixed.
  • A bug in Results Viewer that meant querying results for a single time period would return empty values has been fixed.
  • Messaging feedback in both the run monitor and runlogs has now been improved when the calculation engine cannot run because the results it needs to replace are being used by another process such as Excel.

Calculation engine

  • An issue where models using User Defined Functions could fail to compile, for example when full table and model point optimisations are used, has been fixed.
  • A merged code error during preparation, caused by Prophet incorrectly performing integer optimisations for some calculations relating to module inputs, has been fixed.
  • An issue where changing the future accumulation period of a run could lead to an error if running without regenerating has now been fixed.
  • An issue where runs could sporadically fail when lots of Same As products were in the run has been fixed. The issue related to preparation metadata files for the base product being unnecessarily copied to the same results location repeatedly and would disproportionately affect certain remote file servers.
  • An issue where writing out more than 2GB of individual model point results for a single product caused the run to error has been fixed.
  • An issue where model point values with more than 8 decimal places specified could sometimes result in an error has been fixed.
  • There was an issue where blank spaces in a product alias table were not converted to the default value for the alias. This could cause incorrect results reading or errors in some models when using READ_RESULTS. This issue has been fixed.
  • A bug where the use of SUM, PROD, MINT or MAXT did not force the expression they operated on to be correctly t- limited has been fixed.
  • An issue where t-dependent module inputs were not t-limited properly has been fixed.
  • The use of table and model point optimisations could previously cause inconsistencies by moving variables into or out of inner product loops. This has been corrected.
  • Previously there were three issues with requested results output if the run was being split across multiple machines, all have been fixed:
    • Projection results would be produced even if not requested.
    • Accumulation results would be produced even if not requested.
    • The Only product totals run setting option would incorrectly include results for each sub-product code as well as the product total results files.
  • A bug which meant that dynamic debug results were not produced for all dynamic loops in the individual policy output has been fixed.
  • Pre-existing stochastic summary cache files are now deleted for each product and run number in a newly submitted run pair.
  • An issue which meant codegen diagnostics files were unnecessarily produced for Same As products has been fixed.
  • An issue where models that use modules, but not model points, would output constants in the module links as zero has been fixed.
  • An issue in some runs that meant a PREM_AMOUNT variable not being present could result in INF/NAN values has been fixed and an appropriate error is now given.

Performance

  • A performance issue where in-memory dynamic temporary data was, for certain run types, stored on the remote file server rather than the local workers, has been fixed. Because of this fix users may now find their local worker storage is insufficient for large in-memory dynamic runs. If increasing the size of the volume hosting ProgramData (the default local worker storage location) is not possible, the location (and thus volume) used by the local worker for temporary job data is configurable.
  • There was a performance issue that caused the output of certain results files to bypass the Windows file cache, and write the output using smaller than necessary data packets when writing to a remote file server, causing some Prophet models to run noticeably slower. This has now been fixed.
  • There was a performance issue with the end-of-run processing when writing large quantities of PRINT_TO_FILE output for certain run types. The issue involved merging and copying temporary PRINT_TO_FILE files to their final output path using smaller than necessary data packets, which disproportionately affected output to a remote file server. This has now been fixed.

Prophet Debugger

  • An issue where stopping the Prophet Debugger did not promptly stop the calculation engine has been fixed. The debugger now sends a cancel/abort message to the calculation engine rather than request it stop at the end of the current level number.
  • An issue caused by the changes to results in the last release meant that the Debugger would not run models that included modules. This has now been fixed.

Excel Reporting

  • An issue where an entire projection results file was loaded into memory, rather than the individual variables required by a spreadsheet, has been fixed so that memory usage is similar to pre-2019 Q2 releases. This is important since a lot of Excel users still use 32-bit Excel which is limited to 2-4GB of memory.
  • In the case of spreadsheets using many STOCH_RESULT and STOCH_SUMMARY functions, there were occasions where Prophet 2019 Q2 exhibited reduced performance relative to the prior release, particularly when reading a small amount of data from each results file. This has now been fixed.
  • The performance of the stochastic summary cache has been enhanced.
  • The stochastic summary functionality can now work without error even if the cache file is in a read-only location.
  • A missing file that prevented Excel Reporting from being installed independently of the worker installation has now been added to the Excel Reporting installation.

Prophet Results Database

  • There was a bug which meant that results uploaded across a network could take longer in Prophet 2019 Q2 relative to the prior release. This has been fixed.
  • Variables in module links that are determined to be constant are now identified as such and variable properties are stored in the appropriate <ProductName#Module_Link>_PRJ_CONST_INFO table rather than the corresponding VAR_INFO table.

Licensing

  • An issue which meant a Prophet machine with a name using non-Latin (7-bit ASCII) characters would be unable to acquire a licence from a Client Licence Server has been fixed.
  • Where a proxy (with authentication) is being used in synchronisation between the Client Licence Server and FIS Licence Server, the maximum accepted proxy server password length has been increased from 20 to 25 characters.
  • When a Prophet user’s Active Directory account did not have access to the default Active Directory entities they would have difficulty acquiring a licence. This has been fixed.
  • The default properties of the Windows service underlying the Client Licence Server have been amended to make the service more resilient and installation easier.
  • An issue which meant the Prophet Enterprise API would be unable to cope with a Prophet Licensing client when attempting to run multiple requests in parallel has been fixed.

Plugins

  • An issue where the ADCo plugin function SET_PARAM truncated and forced four of the paramName argument values to have integral values when set, when in fact they could be non-integral, has been fixed.
2018 Q3 Licensing
Prophet Release 2018 Q3 introduces a new licensing technology. The previous licensing solution will not be supported with any release from Prophet Release 2018 Q3 onwards.Pre Release 2018 Q3 Prophet versions will continue to work and will be supported following the standard support lifecycle. However if you require new licence keys for additional users or due to hardware replacement then this will not be possible after December 2020. We therefore advise that all clients upgrade to Prophet Release 2018 Q3 or later well in advance of December 2020 in order to avoid any down time. Please contact your account manager to discuss how we can be of help.Unlike previous versions of Prophet this licensing framework will be written and controlled by FIS. This has some major advantages including simpler client installations and more rapid response to issues. Licences will now be user driven rather than machine. This will help both clients and FIS to implement the solution much more quickly, when new machines are added or replaced in an environment or when a disaster scenario occurs. We will also be able to expand the functionality beyond the restrictions imposed previously. Other advantages include better auditability and tracking of licences and improved support for virtualised environments.The licence options for Prophet Release 2018 Q3 are:

  • User licences: Tied to an individual user’s Active Directory account such that only the Prophet user with the email specified on the licence can acquire it. This is similar to the previous Machine-locked solution.
  • Group licences: These are licences that can be used by multiple users (from a defined list) within an Active Directory group, as controlled by their email addresses and selected by the customer. This is similar to the previous Floating licence.
  • Site licences: These are licences that can be obtained by anyone who has access to the client licence server that is distributing the licence. The technology is safe for virtualised environments.

New licences will be allocated as follows. Machine-locked licences will be transferred, one-to-one, into User licences. Floating licences will be transferred, one-to-one, into Group licences.

New licences will be pushed out by us to your Client Licence Server (CLS). The CLS synchronises with the FIS Licence Server (FLS). The CLS therefore requires access to the internet and individual machines require access to the CLS. If a disaster event occurs and the CLS is lost then a new CLS simply connects to the FLS where replacement licences are synced.

If you require more advice or support regarding the changes to the licence solution please contact FIS Client Services or your local FIS representative.

User-Defined Functions
User Defined Functions (UDFs) are new objects available in Prophet Professional Release 2018 Q3. UDFs are designed to help reduce the need for repeated code within Prophet. In turn errors should also be reduced and maintenance of the code should also be easier. Each function allows for up to 250 lines of code with 9 inputs. They will return a single value out. The functions will not persist and all information must be passed in via parameters. Functions are stored in a Prophet library and can be imported across libraries and workspaces.

The following screenshots show how the new functions are created and how the format of how they are defined. For more details please see the Prophet documentation and help.

Nested Structures
New functionality to allow users to compare save point data has been introduced in Prophet Professional Release 2018 Q3. Users can compare data between nested points or between save points. This allows users to analyse the save point data to see where differences or changes are taking place. This will help users to explain results or to find errors in their nested structures code.

Additional minor enhancements have also been introduced to model and table maps to help users to identify and fix issues.

Backup and Restore
Prophet Backup and Restore has remained largely unchanged since its introduction into Prophet. Prophet Professional Release 2018 Q3 has reworked this functionality to improve flexibility and auditability.

Users can more easily control what goes into a backup file and also what to restore. Users are also able to see more information in Prophet about the backup including who created it, when it was created and what version of Prophet was used without having to restore the workspace first.

User interface
In the indicator expression section of a variable auto-complete has been introduced.

The Modified by field has been added to more Prophet objects so as to improve auditability.

Calculations

  • We have fixed an issue when reading tables inside a module that would cause the worker to crash.
  • Products that fail to generate will now not try to build. This will save user time.
  • ” in the description for a enum previously caused the run to fail.
  • An issues introduced to Copy Results has been fixed. This issue was introduced in a previous release and caused the results to be replaced rather than merged.
  • A memory leak caused by enumerations has been fixed.
  • A memory leak with In Memory Dynamic models has been fixed.
  • A structured exception error when running a large Model Point file has been fixed. Previously Model Point Files over 1GB in size may experience issues.
  • Errors causing runs to fail when using Table and Model Point optimisations have been fixed.
  • Errors with nested structures runs and long file paths have been fixed.

User interface

  • An issue whereby models created with reference to Intex were unable to remove reference to it have been fixed.
  • An error resulting from editing the language in workspace options has been fixed
  • Pasting in invalid data into individual policy results grid resulted in ‘Argument out of range error’. This has been fixed.
  • Some issues around unlinking same as products have been fixed.
  • Opening a product schedule for a second time caused an access violation error which has been fixed.
  • Some performance issues with the formula editor have been addressed.
  • An issue which prevented some tables opening caused by a table constraint has been fixed.
  • Altering window size in diagram view incorrectly caused the individual parts to reset. This has been addressed.
  • Changing a definition type now deletes the definitions from all libraries rather than the current one as previous.
  • An issue entering a number in a table in exponential format when the exponent was a multiple of 10 would cause the value to be incorrectly altered has been fixed.
  • Errors after importing enumerations have been fixed.
  • Issues with fonts in code editor when used with Chinese windows locale have been addressed.
  • Warnings asking you to save when no changes have been made have been removed.
  • Appending definitions on export between 2 workspaces was not working. This has been fixed.
  • We have improved the performance of the pre-run checks that are performed right at the start of a run.
  • The description of structures, reports and table maps now have a limit of 80 characters in a similar way to other objects. If you use longer descriptions then these will be truncated on upgrade.
  • Attempting to delete a product that is referenced by an accumulation would fail after it has been run. This has been fixed.
  • Using initialise in table editor would fail if descriptions were included. This has been fixed.
  • Diagram view may have incorrectly shown the wrong variable results for module link variables. This has been fixed.
  • An issue with some queries in Excel being unable to be saved has been fixed.
  • Altering the font in queries caused an exception which has been addressed.

Modules

  • Improved error and warning messages when things go wrong. An issue calling a plugin from a module caused the product to fail.
  • Code generation errors when attempting to read an array variable from a module may sometimes occur. This has been addressed.
  • Arrayed module input variables are not correctly put in Post Calculation Loop. This has been fixed.
  • We have fixed an issue whereby SWITCH statements were unable to reference module variables.
  • An issue creating a new variable definition for a link variable caused an incorrect error which has now been removed. Similarly changing a variable from number or text to link caused an inconsistency in the variable definition has been fixed.
  • After deleting a module link variable the module is still shown under the product in the tree. This has been corrected.

Nested Structures

  • In some circumstances when an inner run fails the runlog was not produced. This has been fixed.
  • New business failed when there was no existing business.
  • Over optimisation issues which caused some runs to fail in apparently unrelated products has been resolved.
  • An issue where models may fail when using Nested Structures with IMD and Reporting Arrays has been addressed.
  • ENTRY_YEAR given incorrect value for wrong value in inner product new business.
  • Inner structure warnings were not correctly produced when using split by simulation.
  • Attempting to view a table map preview when the table map is empty resulted in an application error. This has been fixed.

 

Prophet API

  • It was previously possible to set incorrect flags for dynamic runs which in turn caused unexpected run errors. It is now not possible to set these incorrect combinations.
  • Excel would crash if you submitted a run to the API without setting the run setting.
  • It was previously possible to set an incorrect dynamic period using the API. This has been fixed.

 

Runlogs

  • Runlogs did not refresh properly if the Results Viewer was left open whilst a run occurred.
  • Using the hyperlinks for the errors in a runlog would sometimes result in the runlog messages not being viewable. This has been fixed.
9.0.4 Nested Structures
We have introduced the ability to skip structure link processing in subsequent dynamic loops to improve runtimes. For each structure link in your run, you may specify in the run settings a different dynamic period for the structure link after a specified initial projection period. Prophet will then only execute that structure link according to your revised frequency. This is useful if you are more concerned about your short-term projections than those in the long-term.Nested Structures is now compatible with dynamic loop at start/end in the outer run.Table maps can now have six dimensions.Table maps, model point maps and structure links can now be imported from one workspace to another.Model point map variables can now be sorted by clicking on the headers.Searching within a workspace now searches the contents of model point maps and table maps.Modules
Module links can now be conditionally executed on the value of a variable specified on the module link form. Provided this variable is time independent and of type number, if its value is 1 the module link will be executed, and will not otherwise. This provides the user with greater flexibility in controlling the calculations executed in their run. In products that contain a large number of model points, conditioning module links could help reduce runtime.If a module link is conditionally executed, an advanced option flag has been added to the module link form to specify whether zero should be returned from an unexecuted module link when referenced at runtime. If this flag is not enabled, Prophet will instead produce an error.

The use of conditional module links is, in addition, fully supported with our other software:

  • Uploading workspaces to PE
  • Comparing results with PQA or queries
  • Storing results with PRD

In the product tree the modules being used by the product are now shown. In a similar way under an indicator in the tree the associated modules that use that indicator are now shown.

Module diagnostic files are now shown more clearly in the tree. Previously it was not clear which files were product and which were module diagnostic files. These have now been separated.

We have improved the Module Tag functionality so that users can now search for tags and see which modules are associated to a tag in the tree. This helps users to manage the modules that they have in a workspace.

Module links and the variable name are now shown on separate lines with diagram view. This helps to improve the appearance when viewing variables of this type given the likely larger combined length of the two.

Compare
Historically Prophet has been able to compare products and libraries. We have added the ability to compare run settings, structures and structure links. These objects are compared in a similar way to products and libraries, and like these objects can be compared within the same workspace and across different workspaces.

A further enhancement to the comparison functionality is that following a product compare, input variables can be imported from one product to the other.

Calculations
If an Extended formula uses the function OPTION FIRST_MODEL_POINT_ONLY but needs to recalculate outside of the first model point then it will now error.

The READ_FLEXIBLE_TABLE statement has been updated to support the use of string literals with mapped explicit indices.

In Release 9.0 Update 3 the performance statistics provided in the runtime code generation diagnostics file for array variables gave the runtime for each individual array element; this has been updated to provide the sum-total for those array variables optimised out at preparation.

User Interface
A new total ‘Array Size’ column has been added in Details View for array variables.

When choosing the array dimension, in the properties of a variable the size of the dimension is now displayed.

When performing a find and replace, the changes would be performed one at a time and a validation after each change was then performed. This could make the formula invalid. It is now possible to perform a find and replace across the whole code in one go without performing a validation.

Flexible Table conversion can now be performed from outside of the table and without interaction by the user.

Prophet printouts can now optionally include the associated actuarial documentation.

Individual projection results grids can now be edited and managed from within Excel. Within the grid the user can now also delete multiple rows in one go. Similarly, within model point maps, multiple rows can be highlighted and deleted.

Previously, when clearing the Same As checkbox in the product properties, that product would be recreated with the default code from the library with the same indicators. This has been changed so that the new product becomes an exact replica of the original product. If a user wants to create a new product with the same indicators but with the default code then the user will now need to create a new product and add the corresponding indicators.

The product link alias and structure link alias screens have been enhanced.

Within a product, it is now possible re-hide core variables once they have been unhidden.

Diagram View
To help users track results, it is now possible to highlight a whole row of results within Diagram View. This is achieved by clicking on the date in the middle panel.

Within Structure Diagram View the boxes will be resized when the names are too big.

There is a new option to fix the layout of Diagram View so the layout can be remembered between instances of Diagram View and workspaces.

API
Commands within the API exist to be able to add a product to a structure. Extra checks have been added to prevent a product from being added to a structure which would make the structure invalid – for instance, due to the dynamic period of that level.

New commands to be able to amend the structure properties to support skip structure link have been added.

Prophet Results Database
Stochastic summary results can now be uploaded to a SQL Server Database using PRD.

Improved interconnectivity with Prophet Enterprise:

  • Job ID now included as a field in the SETTINGS table.
  • New -standalone argument added allowing results to be uploaded into separate tables for each run number. This was designed to facilitate the upload of Analysis of Change runs from Assumptions Manager.

New field in the RESULTS_INFO table containing the command line used at upload.

Changed the data types of various fields in the uploaded tables so that they are more appropriate, robust and consistent.

Further enhancements made for new functionality such as modules and individual policy results:

  • SETTINGS table updated.
  • Tables containing nothing other than key value fields are now optimised out of the upload (this frequently occurred with use of the -vars argument).
  • Installation
    The system installer now checks if the machine, once it has a worker deployed on it, has the correct SMB2 settings. SMB2 is a network protocol used to implement windows file sharing. The settings relate to how the file sharing client, in this case the worker machine, caches metadata information about file shares, which are used for sharing a workspace with workers. Examples of such caching include directory listings, file existence and file properties. This caching, if left enabled, can cause worker grids to have an incoherent image of what is and is not on the file shares, thus causing runtime errors, for example where a file that is seen to exist by one worker is not seen by another worker.The installer, if it detects the presence of SMB2 caching, now provides an additional option, selected by default, on the worker settings installation page. This option allows the user to automatically fix the SMB2 settings on the machine to which the worker is deployed. If the machine will not be used as part of a multi-machine distributed run or job then you do not need to turn off the SMB2 caching. In addition, the calculation engine checks the settings at the start of a run or job that uses multiple machines, and if unsuitable settings are detected it generates a warning in the system log part of the run log.
Calculations

  • We have fixed various issues with Nested Structures and Modules.
  • Debugging models with Public Persistent extended formula arrays no longer gives a code generation error.
  • Updating table names used in Nested Structures’ table maps now works correctly upon next run even if you do not explicitly regenerate the structure.
  • Split run by model point batches now works with modules.
  • Array functions (such as SUM, MAXT, MINT, PROD) whose ranges are not time constant, are now correctly allowed for by the sequencer when working out time periods that need calculating for different variables.
  • PROJ_RESULT and STOCH_RESULT, used in model runs, no longer think results are missing for an entire product and run number if some of the requested spcodes or variables are absent – this caused subsequent valid result requests to fail even when the results were present.
  • The Run Monitor now shows more information about the internal progress of structure links when splitting nested structures by product or simulation.
  • Improved the sequencing of optimised array variables when used with a goal seeking loop – previously they were sometimes not correctly included, or recalculated, in the goal seeking loop when they should have been.
  • A model point optimisation bug, where part of the preparation logic would not always pass successfully has been fixed.
  • A table optimisation bug causing a compile failure, involving hard coded table names in certain generic or stochastic table calls, has been fixed.
  • Module links failing to execute did not always cause their products to fail as well – runs could complete with values for the main product produced and thus the run log would suggest the run had been successful; this has been addressed.
  • If dimension bounds are changed and none of these dimensions are used by any of a module’s variables, then that module is no longer needlessly recompiled.

 

User Interface

  • Previously importing libraries from one workspace to another incorrectly brought no enumerations that were referenced. This has been fixed.
  • A change to table notes now prompts the user to save the table when closing so it’s less easy to close without saving table notes.
  • It is now possible to set a conditional breakpoint to an enumeration element’s name when previously this had to be the element’s index value.
  • An issue with opening save point model point files when ‘Show Default Row Value Column’ option was selected for Names/Descriptions has been fixed.
  • In Diagram View number format now also applies to non-time-dependent values as soon as it’s changed and the number of decimal places is persisted in the Number Format dialog box.
  • The dropdown for array filter in Diagram View has been fixed. Previously the blank entry was being removed and selecting an item could display a different item.
  • Previously the name of the diagnostic file for a long product name or a product and module link was truncated in the tree, making it impossible to open. This has been fixed: the whole name is shown and the file can be opened.
  • When changing variable definitions to module links every variable definition is opened. As it is only possible to have 50 windows open at a time in Prophet Professional, multi-select and changing more than 50 definitions was resulting in an application error. This has been changed so it is not possible to open more than 50 windows in this manner.
  • An application error when there were multiple qualifying definitions has been fixed.
  • A formatting issue in formula editor with enumerations when the value was in more than one enumeration has been fixed.
  • FAC to Stochastic converter is now working as expected when the ‘Include Subdirectories’ check box is selected.
  • When there are a large number of table constraints, for example on a mortality table, and an incorrect value was added, the error message could become unreadable. This has been fixed.
  • Runs can fail if the path to the workspace contains non-ASCII characters. We have provided a warning when trying to execute a run that this may cause issues, enabling the user to mitigate the issue as soon as possible.
  • Changing a non-dimension property of multiple variables which were a mixture of array and non-array variable caused the dimensions to be lost, this is no longer the case.
  • The summary section on a batch compare when there were no differences is now being shown.

 

Prophet Results Database

  • Improved the handling of invalid numeric values (e.g. +/-INF and NANs) sometimes found in results.
  • There is now input validation for text files used with any of the results filters – invalid values are no longer permitted.
  • Variables for a particular module link can now be specified with the -vars argument.
9.0.3 Nested Structures
A new text constraint has been introduced to allow more efficient code for reading array variables from the inner product.Nested Structures objects can now be printed from the Prophet User Interface.Nested Structures controls have been added to the Prophet Professional API.Modules
Module tags have been introduced as properties on a module. When editing the module link these modules can be chosen to help the user to select which module should be selected.Module results can now be uploaded to the PRD.Diagram View has been enhanced so that users can move easily between product and module diagram view.
Modules can now be used with the PMPP run option.
Indicators can be restricted to only be used in modules or products.Search results now include module link variables.Modules with Nested Structures
Modules can now be used in products that run within an inner or outer structure within the Nested Structure environment.Books
Variables that are not in a book can now easily be printed.
API
In addition to the Nested Structures setting some other properties have been added to the API such as properties from the run setting that were missing.
User interface
We have improved the printing of lists of objects where those objects have long names.An issue where the debugger would not stop on an array inside an extended formula has been fixed.Library validate has been corrected such that an error is given when a referenced variable is renamed or the properties changed.Calculations
When a product has no model point file a binary individual model point file was produced when the option was turned on. This file is not able to be opened and causes an issue uploading the results to PRD. The file is no longer produced for products with no model points.A runlog issue where messages were duplicated when using Model Point Batches split method has been fixed.Nested Structures
If using Nested Structures then previously the default maximum projection term would not feed through to the inner run setting. This has been corrected.When using a text variable within a DCS grouping Nested Structures run would cause the run to fail. This has been fixed.Various improvements have made to the save point diagram view.Previously inner run settings could be deleted without removing them from structure links. This could then affect upload to Prophet Enterprise. A warning is now given and if accepted the links are removed from relevant structure links.

Renaming a Model Point Map was incorrectly not renaming the DCS script. This has been fixed.

An issue where Structure Diagram View was not showing the inner structure correctly has been fixed.

An issue where Read_Nested_Stat was not working when reading a Same As Product has been fixed.

Modules
Adding a module link as a watch variable within the debugger and toggling a break point was not possible when the module link was open. This has been fixed.

The option ‘First level for stochastic results files’ was not working correctly for module variables. Results for all module variables were produced even if the product was below the level specified. This has been fixed.

Filtering the structure in the user interface now correctly applies the filter to modules as well as other objects.

Prophet Licensing was introduced in Prophet Release 2018 Q3 as a replacement for Prophet Licence Manager. This is because licensing in Prophet Release 2018 Q3 now uses an internally developed solution to manage licences rather than HASP.


Note: When you upgrade your version of Prophet applications to Release 2018 Q3 or later, Prophet Licence Manager is no longer required, so you can uninstall Prophet Licence Manager from the Windows Control Panel. If you do so and you have other non-Prophet applications that use HASP you will have to reinstall HASP after uninstalling Prophet Licence Manager.


The Prophet suite of products are secured using software licences that are located on your Client Licence Server (CLS). The CLS is the hub for all your organisation’s Prophet licences.

The types of software licences that are available are as follows:

  • User licenses: Tied to an individual user’s Active Directory account such that only the Prophet user with the email specified on the license can acquire it. This is similar to the previous Machine-locked solution.
  • Group licenses: These are licenses that can be used by multiple users (from a defined list) within an Active Directory group, as controlled by their email addresses and selected by the customer. This is similar to the previous Floating license.
  • Site licenses: These are licenses that can be obtained by anyone who has access to the client license server that is distributing the license. The technology is safe for virtualized environments.

New licenses will be allocated as follows. Machine-locked licenses will be transferred, one-to-one, into User licenses. Floating licenses will be transferred, one-to-one, into Group licenses.

There are several ways to improve the model efficiency and utilize the functions in Prophet.

  1. Always provide precise descriptions in the following objects to help others understand the model easily and clearly.
    • Table
    • Product
    • Accumulation
    • Variable
    • Run number
    • SPCODE
  2. Use “Actuarial Documentation” for model documentation.
  3. Employ “Same as” if new product features are similar to those of any existing product since “Same as” products do not have separate codes and thus can reduce maintenance efforts.
    • If all features are same between two products except of parameters, we can use “same as”.
    • If only minor feature is different between two products, we can still employ “same as” products by utilizing “IF PROD_NAME = product_1 THEN *** ELSE ***” statement to differentiate between two products. Or create indicator variable to differentiate. For example, IF DTH_BEN_IND = 1 THEN *** ELSE ***.
  4. Assumptions tables should be organized easily understood. Most of assumptions can be classified into the following types:
    • Expense assumption
    • Lapse assumption
    • Mortality assumption
    • Investment return assumption

    The relevant parameters are recommended to be placed in appropriate tables with easily understood names.

  5. Generic tables: this table format is used when the value or values required for a variable in any of your products depend on the values of between two and ten index variables.
  6. Global table: contains values for variables that have the same value across all products for any run number. For example, sensitivity factors for expense, lapse, mortality, investment return assumptions, and the renewal expense inflation rate. This type of assumption would not normally vary by product.
  7. Parameter table: contains values for variables that have the same value across all model points for any product. For example, SURR_INT_PC, VAL_INT_PC, SM_SAR_PC, SM_RES_PC, etc. This type of assumption normally varies from product to product but is the same for every model point within a product.
  8. Avoid huge assumption tables. The size of assumption table will significantly impact run time. It is suggested to split the table into several small tables if it is too big. For example, a table with more than 5000 rows and 5 index variables.
  9. Use Excel VBA for table generation. It is suggested to record tables in Excel format. It is easier to trace the assumption changes in Excel. VBA program can help to generate Prophet tables from Excel spreadsheets.
  10. Avoid reading table if unnecessary. Reading table is time consuming than normal calculation. It is the best practice to avoid reading table if unnecessary. For example:
    • UFII_PC, Original Formula Definition
      IF t= 0 THEN
      0
      ELSE
      READ_GENERIC_TABLE(“Inv_rate”,”Y”,”PROD_NAME”,MIN(POLICY_YEAR,10))
    • A better code following the best practice:
      IF t = 0 THEN
      0
      ELSE IF mult(t-1, 12) AND POLICY_YEAR <= MAX_INVRATE_YR THEN
      READ_GENERIC_TABLE(“Inv_rate”,”Y”,”PROD_NAME”,POLICY_YEAR
      ELSE
      UFII_PC(t-1)
  11. Avoid reading table for factors. It is suggested to calculate reserve factors, surrender value factors in first principle rather than reading from table.
  12. Avoid referring inappropriate variables. Normally, there are three lines of calculation in liability products.
    • Pricing / surrender line: variables of this line are used for premium, surrender value calculation. More variables contain text “SURR”. For examples, SURR_INT_PC, SURR_VAL_PP, Q_SURR_PN, SURR_NETPPREM.
    • Reserving line: variables of this line are used for reserve calculation. Most variables contain text “VAL”. For examples, VAL_INT_PC, Q_VAL_PN, VAL_ANN_PREM.
    • Best estimate line: variables of this line are used for cash flow, P&L projection. For examples, Q_EXP_PN, DEATH_OUTGO, GROSS_PROFIT.
  13. Avoid unnecessary complex calculations. For example, premium rate or beta for reserve calculation. The calculation is only needed at time 0. Other time points could just equal to premium rate and beta at time 0.
  14. Avoid hard coding. All assumptions and parameters should be stored in tables rather than hard coding. Use the table driven parameters rather than hard coding. For examples,
    • UFII_PC: Constant Definition. Constant: 5.0. Change to read global table.
    • DEATH_BEN_PP: IF PROD_NAME = product_1 THEN *** ELSE ***. Change to IF DTH_BEN_IND = 1 THEN *** ELSE ***. Add variable DTH_BEN_IND as read parameter table.
  15. Create new variable by duplicating existing. It is safe to create a new variable in libraries by copying an existing one with similar features, rather than creating a new one from the scratch.
    • Follow naming convention. For example, we want to create a new variable SB_OUTGO for survival benefit. We can copy DEATH_OUTGO and change its name and property accordingly.
    • Set the new variable properties carefully and correctly: Accounting Type: Revenue Account or Balance Sheet, Cumulative or not, Variable Code.
  16. Use new indicator for new variables. Create a set of company / product specific indicators for new variables and definitions. Keep the standard definition unchanged. For example, create ING_WL for the ING whole life products.
  17. Try not to use complex functions. Some complex calculation is time consuming. Such as exponential calculation which is powered by t. For example: X(t) = V ^ (t/12) can be changed to Y = V ^ (1/12), X(t) = X(t-1) * Y.
  18. Always add comments for complex or special code in the customized variable formula. For example, REBASE_MTH:
  19. Create an array variable for a group of same calculations. Use array variables rather than create a lot of variables for same calculations. For example:

  20. Run single model point before final run. If there are a large amount of model points, it is a good practice to run the first model point to test the code and table setting before final run.
  21. Employ Accumulation and Summary products. Under a good model management process, the calculation in model is more systematically controlled than in Excel. Try to reduce the calculations in Excel. It can reduce the mistakes caused by manual work. Accumulation and Summary product are useful to aggregate results. Summary product can be used to do company level adjustment.