diff --git a/full-ifrs17-template/Export/MapTemplate.ipynb b/full-ifrs17-template/Export/MapTemplate.ipynb index 4aa026ea..af901570 100644 --- a/full-ifrs17-template/Export/MapTemplate.ipynb +++ b/full-ifrs17-template/Export/MapTemplate.ipynb @@ -56,18 +56,6 @@ "\n#!eval-notebook \"../Initialization/InitSystemorphBaseToMemory\"" ] }, - { - "cell_type": "markdown", - "source": [ - "# Import dependencies" - ] - }, - { - "cell_type": "code", - "source": [ - "#!import \"../Export/ExportConfiguration\"" - ] - }, { "cell_type": "markdown", "source": [ diff --git a/full-ifrs17-template/Initialization/InitSystemorphBaseToMemory.ipynb b/full-ifrs17-template/Initialization/InitSystemorphBaseToMemory.ipynb index cf90dac4..1dc82a4e 100644 --- a/full-ifrs17-template/Initialization/InitSystemorphBaseToMemory.ipynb +++ b/full-ifrs17-template/Initialization/InitSystemorphBaseToMemory.ipynb @@ -100,7 +100,7 @@ { "cell_type": "code", "source": [ - "await Import.FromFile(\"../Files/DimensionsAndPartitions.csv\").WithFormat(\"AocConfiguration\").WithTarget(DataSource).ExecuteAsync()" + "await Import.FromFile(\"../Files/DimensionsAndPartitions.csv\").WithFormat(ImportFormats.AocConfiguration).WithTarget(DataSource).ExecuteAsync()" ] }, { diff --git a/full-ifrs17-template/InputFormatDescription.ipynb b/full-ifrs17-template/InputFormatDescription.ipynb index 2e81506f..9dd70de5 100644 --- a/full-ifrs17-template/InputFormatDescription.ipynb +++ b/full-ifrs17-template/InputFormatDescription.ipynb @@ -36,16 +36,16 @@ "source": [ "A cashflow file is named **NominalCashflows** *\\_* *\\_* *\\_* and is composed of two sections: **Main** and **Cashflow**.", "\n", - "\nThe **Main** section contains information such as: Reporting Node, Year, Month and Scenario for which the data is being imported. This information is used to define the [partition](./DataModel/DataStructure#partitions) to which the data belongs.", + "\nThe **Main** section contains information such as: Reporting Node, Year, Month and Scenario for which the data is being imported. This information is used to define the [partition](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#partitions) to which the data belongs.", "\n", "\nThe **Cashflow** section contains the cash flow data. Several pieces of information are required to characterize a cash flow correctly:", - "\n- [DataNode](./DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", - "\n- [AmountType](./DataModel/DataStructure#amount-type) : entered with its SystemName,", - "\n- [AocType](./DataModel/DataStructure#aoc-type) : entered with its SystemName,", - "\n- [Novelty](./DataModel/DataStructure#novelty) : entered with its SystemName,", + "\n- [DataNode](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", + "\n- [AmountType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#amount-type) : entered with its SystemName,", + "\n- [AocType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#aoc-type) : entered with its SystemName,", + "\n- [Novelty](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#novelty) : entered with its SystemName,", "\n- AccidentYear : relevant for Data Node with Liability Type: Liability for Incurred Claims.", "\n", - "\nAll valid combinations of AocType and Novelty can be found in [AocConfiguration](./DataModel/DataStructure#aoc-configuration) with DataType Optional or Mandatory.", + "\nAll valid combinations of AocType and Novelty can be found in [AocConfiguration](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#aoc-configuration) with DataType Optional or Mandatory.", "\n
The cash flow is entered in the columns named ValuesN where N goes from 0 to the lenght of cash flow. The Value0 corresponds to January of the Year entered in the **Main** section for every combination of AocType and Novelty. " ] }, @@ -64,12 +64,12 @@ "source": [ "An Actuals file is named **Actuals** *\\_* *\\_* *\\_* and is composed of two sections: **Main** and **Actual**.", "\n", - "\nThe **Main** section contains information such as: Reporting Node, Year, Month for which the data is being imported. This information is used to define the [partition](./DataModel/DataStructure#partition) to which the data belong.", + "\nThe **Main** section contains information such as: Reporting Node, Year, Month for which the data is being imported. This information is used to define the [partition](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#partition) to which the data belong.", "\n", "\nThe **Actual** section contains the actuals data. Several pieces of information are required to to characterize an Actuals amount correctly:", - "\n- [DataNode](./DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", - "\n- [AocType](./DataModel/DataStructure#aoc-type) : entered with its SystemName,", - "\n- [ValueType](./DataModel/DataStructure#amount-type) : corresponds to AmountType SystemName extended with the ExternalId,", + "\n- [DataNode](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", + "\n- [AocType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#aoc-type) : entered with its SystemName,", + "\n- [ValueType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#amount-type) : corresponds to AmountType SystemName extended with the ExternalId,", "\n- AccidentYear : relevant for Data Node with Liability Type: Liability for Incurred Claims." ] }, @@ -88,12 +88,12 @@ "source": [ "An Openings file is named **Openings** *\\_* *\\_* *\\_* and is composed of two sections: **Main** and **Opening**. In an AoC for one period, we only need one file with the year/month combination of the beginning of the period. Some GICs do not need any entries in Openings.", "\n", - "\nThe **Main** section contains information such as: Reporting Node, Year, Month for which the data is being imported. This information is used to define the [partition](./DataModel/DataStructure#partition) to which the data belong.", + "\nThe **Main** section contains information such as: Reporting Node, Year, Month for which the data is being imported. This information is used to define the [partition](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#partition) to which the data belong.", "\n", "\nThe **Opening** section contains values at opening of an analysis. Several pieces of information are required to to characterize an Opening amount correctly:", - "\n- [DataNode](./DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", - "\n- [EstimateType](./DataModel/DataStructure#estimate-type) : entered with its SystemName,", - "\n- [AmountType](./DataModel/DataStructure#amount-type) : entered with its SystemName,", + "\n- [DataNode](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#group-of-contracts) : lowest granularity of the Data Node, it is entered with its SystemName,", + "\n- [EstimateType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#estimate-type) : entered with its SystemName,", + "\n- [AmountType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#amount-type) : entered with its SystemName,", "\n- AccidentYear : relevant for Data Node with Liability Type: Liability for Incurred Claims." ] } diff --git a/full-ifrs17-template/README.md b/full-ifrs17-template/README.md index 5c22a397..682bf0c1 100644 --- a/full-ifrs17-template/README.md +++ b/full-ifrs17-template/README.md @@ -1,21 +1,24 @@ -![Systemorph_logo.png](https://portal.systemorph.cloud/api/project/userclone/env/dev/file/download?path=Images/Systemorph_logo.png) +![Systemorph_logo.png](https://portal.systemorph.cloud/api/project/full-ifrs17-template1/env/dev/file/download?path=Images/Systemorph_logo.png) **Full IFRS 17 Template** Systemorph's IFRS 17 [Calculation Engine](https://portal.systemorph.cloud/api/project/ifrs17ce/env/dev/) is a tool to conduct all the essential IFRS 17 calculations given some key figures. + Systemorph's *Full IFRS 17 Template* uses our IFRS 17 Calculation Engine to import several use-cases and show the results. # Get Started -Interact with this *Full IFRS 17 Template* after having cloned the project. +Interact with this *Full IFRS 17 Template* after having cloned the project # Supporting Material -Check out the [video]() (this is a youtube link to Marketing) +Check out the [video]() (this is a youtube link or the video is embedded) + +Check out our IFRS 17 initiative [here](landing page) # Report -Check out the IFRS 17 reports [here](./Report/Reports) +Check out the IFRS 17 reports computed for our use-cases [here](./Report/Reports) # Testing @@ -27,9 +30,7 @@ If you want a step by step guide into the calculation logic, please go to the "S # Got Questions -For support around the IFRS17 CalculationEngine you can personally reach out to one of our IFRS17 experts: -- [Dr. Andrea Muolo]() -- [Dr. Davide Colleoni](https://www.linkedin.com/in/davidecolleoni/) -- [Mrs. Sara Busato]() +For support around the IFRS 17 CalculationEngine get in contact with our Community: -If you are interested in adapting the IFRS17 CalculationEngine to your data and would like to start a collaboration with us, you can contact [Wolfgang Maehr]() \ No newline at end of file +- [Community]() -link to the community page- +- [Evangelists]() -link to Evangelists page- \ No newline at end of file diff --git a/full-ifrs17-template/Test/SpecificationsFinancialPerformance.ipynb b/full-ifrs17-template/Test/SpecificationsFinancialPerformance.ipynb index 3cfaff8e..8be275bc 100644 --- a/full-ifrs17-template/Test/SpecificationsFinancialPerformance.ipynb +++ b/full-ifrs17-template/Test/SpecificationsFinancialPerformance.ipynb @@ -218,7 +218,7 @@ { "cell_type": "markdown", "source": [ - "The Fulfillment Cashflow (FCF) corresponds to the sum of the Best Estimate [Present Value](../Import/ImportScopeCalculation#current-and-locked) (PV) and the [Risk Adjustment](../Import/ImportScopeCalculation#risk-adjustment) (RA), both summed over Amounty Types, and both discounted with the Locked-In curve in the BBA valuation approach:", + "The Fulfillment Cashflow (FCF) corresponds to the sum of the Best Estimate [Present Value](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#current-and-locked) (PV) and the [Risk Adjustment](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#risk-adjustment) (RA), both summed over Amounty Types, and both discounted with the Locked-In curve in the BBA valuation approach:", "\n", "\n$$", "\n\\text{FCF}(\\text{AoC}) = \\text{PV Locked}(\\text{AoC})", @@ -1136,7 +1136,7 @@ "source": [ "Based on the results calculated in Section 3, we check here the consistency of the [Financial Performance Report](#report). ", "\n", - "\nFiner granular reconciliations can be performed by following the datails of how each report contributes to the Financial Performance Report. Please, refer to the [Report documentation](../Report/ReportScopes#financial-performance) for all the details. " + "\nFiner granular reconciliations can be performed by following the datails of how each report contributes to the Financial Performance Report. Please, refer to the [Report documentation](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Report/ReportScopes#financial-performance) for all the details. " ] }, { diff --git a/full-ifrs17-template/Test/SpecificationsImportActuals.ipynb b/full-ifrs17-template/Test/SpecificationsImportActuals.ipynb index 7785ed4a..8993aa5c 100644 --- a/full-ifrs17-template/Test/SpecificationsImportActuals.ipynb +++ b/full-ifrs17-template/Test/SpecificationsImportActuals.ipynb @@ -84,7 +84,7 @@ { "cell_type": "markdown", "source": [ - "[Setup IFRS17 Calculation Engine](../Import/ImportScopeCalculation):" + "[Setup IFRS17 Calculation Engine](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation):" ] }, { @@ -155,7 +155,7 @@ "\n3. Amortization (AM) ", "\n4. End of Period (EOP) ", "\n", - "\nWe consider 4 types of Actual values, which are distinguished through their [Estimate Type](../DataModel/DataStructure#estimate-type):", + "\nWe consider 4 types of Actual values, which are distinguished through their [Estimate Type](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#estimate-type):", "\n- Actuals (A)", "\n- Advance Actuals (AA)", "\n- Overdue Actuals (OA)", diff --git a/full-ifrs17-template/Test/SpecificationsImportCashflows.ipynb b/full-ifrs17-template/Test/SpecificationsImportCashflows.ipynb index 4be8de77..5034a6ac 100644 --- a/full-ifrs17-template/Test/SpecificationsImportCashflows.ipynb +++ b/full-ifrs17-template/Test/SpecificationsImportCashflows.ipynb @@ -91,7 +91,7 @@ { "cell_type": "markdown", "source": [ - "[Setup IFRS17 Calculation Engine](../Import/ImportScopeCalculation):" + "[Setup IFRS17 Calculation Engine](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation):" ] }, { @@ -160,7 +160,7 @@ { "cell_type": "markdown", "source": [ - "Here the correct Yield Curve is chosen among those imported from Initialization/Systemorph/Data.csv according to the [current period](#year-and-period) and the Aoc Step according the [Aoc Configuration](../DataModel/DataStructure#aoc-configuration). In the following we retrieve the desired identity." + "Here the correct Yield Curve is chosen among those imported from Initialization/Systemorph/Data.csv according to the [current period](#year-and-period) and the Aoc Step according the [Aoc Configuration](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#aoc-configuration). In the following we retrieve the desired identity." ] }, { @@ -603,7 +603,7 @@ "\n\\text{CDC}_t^{\\text{Amount Type}=\\text{CDR}} = \\sum_{\\tau=t} \\big( \\text{Valid Discount}_{\\frac{t}{12}} \\big)^{\\tau-t+1} \\cdot \\text{Nominal}_\\tau^{\\text{Claim}} \\cdot \\big( e^{-\\gamma(\\tau-t)} -1 \\big)", "\n$$", "\n", - "\nwhere $\\gamma$ is the assumed non-performance probability of the reinsurer to be provided as an [input parameter](../DataModel/DataStructure#credit-default-rate).", + "\nwhere $\\gamma$ is the assumed non-performance probability of the reinsurer to be provided as an [input parameter](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#credit-default-rate).", "\n", "\nThis rate is constant for the whole projection period, that is, $\\gamma$ is not a function of $t$. ", "\nIt effectively amounts to a constant increase in the continuous discount rate by $\\gamma$. " @@ -716,7 +716,7 @@ { "cell_type": "markdown", "source": [ - "Secondly, the correct credit risk rate (parameter $\\gamma$ in the [formula above](#non-performance-risk-adjustment)) is retrieved from the list of imported [Partner Rating](../DataModel/DataStructure) and [Credit Default Rates](../DataModel/DataStructure) relative to the target [Data Node](#year-and-period)'s Partner" + "Secondly, the correct credit risk rate (parameter $\\gamma$ in the [formula above](#non-performance-risk-adjustment)) is retrieved from the list of imported [Partner Rating](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure) and [Credit Default Rates](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure) relative to the target [Data Node](#year-and-period)'s Partner" ] }, { @@ -780,7 +780,7 @@ { "cell_type": "markdown", "source": [ - "For an implementation of these formulas refer to the [ImportScopeCalculation notebook](../Import/ImportScopeCalculation). " + "For an implementation of these formulas refer to the [ImportScopeCalculation notebook](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation). " ] }, { @@ -804,7 +804,7 @@ { "cell_type": "markdown", "source": [ - "The Present Value Base (PVB) values are valid for all [Economic Basis](../DataModel/DataStructure#economic-basis) and depends on the corresponding [AoCType](../DataModel/DataStructure#aoc-type):", + "The Present Value Base (PVB) values are valid for all [Economic Basis](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#economic-basis) and depends on the corresponding [AoCType](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#aoc-type):", "\n", "\n$$", "\n\\text{PVB}_t \\big(\\text{AoC}\\big) = ", diff --git a/full-ifrs17-template/Test/SpecificationsTechnicalMargin.ipynb b/full-ifrs17-template/Test/SpecificationsTechnicalMargin.ipynb index 26e2d8f3..43191eec 100644 --- a/full-ifrs17-template/Test/SpecificationsTechnicalMargin.ipynb +++ b/full-ifrs17-template/Test/SpecificationsTechnicalMargin.ipynb @@ -83,7 +83,7 @@ { "cell_type": "markdown", "source": [ - "[Setup IFRS17 Calculation Engine](../Import/ImportScopeCalculation):" + "[Setup IFRS17 Calculation Engine](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation):" ] }, { @@ -189,7 +189,7 @@ "cell_type": "markdown", "source": [ "Projected Present Values (PPVs) are calculated for each Amount Type (AT) either with the *locked-in* (L) and with the *current* (C) Yield Curves. While the former is the latest available as per end of the DataNode's inception year, the latter is the latest available as per the current period. ", - "\nPPVs for both Economic Basis L and C have been defined [here](../Import/ImportScopeCalculation#present-value) and tested [here](SpecificationsImportCashflows#present-values). ", + "\nPPVs for both Economic Basis L and C have been defined [here](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#present-value) and tested [here](SpecificationsImportCashflows#present-values). ", "\n", "\nAccording to the BBA methodology, the CSM calculation uses the PV with locked-in Yield Curve simply defined as", "\n", @@ -228,7 +228,7 @@ { "cell_type": "markdown", "source": [ - "Aggregated values are also available as the sum over all [Amount Types](../DataModel/DataStructure#amount-type):", + "Aggregated values are also available as the sum over all [Amount Types](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#amount-type):", "\n", "\n$$", "\n\\text{PV Locked Value}(\\text{AoC}) = \\sum_{\\text{AT}} \\text{PV Locked}(\\text{AoC}, \\text{AT})", @@ -270,7 +270,7 @@ { "cell_type": "markdown", "source": [ - "The CSM calculation also uses locked-in Risk Adjustment (RA Locked) which is retrieved from the corresponding Present Value with [Calculation Type](../DataModel/DataStructure#calculation-type) being RA defined [here](../Import/ImportScopeCalculation#present-value) and tested [here](SpecificationsImportCashflows#present-values). ", + "The CSM calculation also uses locked-in Risk Adjustment (RA Locked) which is retrieved from the corresponding Present Value with [Calculation Type](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#calculation-type) being RA defined [here](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#present-value) and tested [here](SpecificationsImportCashflows#present-values). ", "\n", "\nRisk Adjustment values can be written as", "\n", @@ -278,7 +278,7 @@ "\n\\text{RA Locked Value}(\\text{AoC}) = \\text{PV}(\\text{AoC})|_{\\substack{ \\text{Calculation Type = RA} \\\\ \\text{Economic Base = L} }}", "\n$$", "\n", - "\nwhere the imported Cashflows for the RA Calculation Type are already aggregated over all [Amount Types](../DataModel/DataStructure#amount-type)." + "\nwhere the imported Cashflows for the RA Calculation Type are already aggregated over all [Amount Types](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/DataModel/DataStructure#amount-type)." ] }, { @@ -376,7 +376,7 @@ "\n\\right.", "\n$$", "\n", - "\nwhere AMF is the Amortization Factor that is defined [here](../Import/ImportScopeCalculation#amortization-factor) and tested [here](SpecificationsImportCashflows#amortization-factor), with YC being the [Yield Curve](#yield-curves) and TS is the Time-Step, ", + "\nwhere AMF is the Amortization Factor that is defined [here](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#amortization-factor) and tested [here](SpecificationsImportCashflows#amortization-factor), with YC being the [Yield Curve](#yield-curves) and TS is the Time-Step, ", "\nand the Premiums, Attributable Expense and Commissions and Investment Claims terms are given by:", "\n", "\n$$", @@ -392,7 +392,7 @@ "\n\\end{array}", "\n$$", "\n", - "\nThe AoC Type **CF** is implicit for all formulas, PV is the [present value](#present-value) with Calculation Type **BE**, and Actuals have Estimate Types **A**, **OA** and **AA** (see details [here](../Import/ImportScopeCalculation#actual-base))." + "\nThe AoC Type **CF** is implicit for all formulas, PV is the [present value](#present-value) with Calculation Type **BE**, and Actuals have Estimate Types **A**, **OA** and **AA** (see details [here](https://portal.stage.systemorph.cloud/project/ifrs17ce/env/dev/Import/ImportScopeCalculation#actual-base))." ] }, { diff --git a/ifrs17/Constants/Consts.ipynb b/ifrs17/Constants/Consts.ipynb index 423a41b4..8c67e92e 100644 --- a/ifrs17/Constants/Consts.ipynb +++ b/ifrs17/Constants/Consts.ipynb @@ -141,6 +141,7 @@ "\n public const string DataNodeParameter = nameof(DataNodeParameter);", "\n public const string SimpleValue = nameof(SimpleValue);", "\n public const string Opening = nameof(Opening);", + "\n public const string AocConfiguration = nameof(AocConfiguration);", "\n}" ] }, diff --git a/ifrs17/Import/ImportScopeCalculation.ipynb b/ifrs17/Import/ImportScopeCalculation.ipynb index ee63b100..c5709d0a 100644 --- a/ifrs17/Import/ImportScopeCalculation.ipynb +++ b/ifrs17/Import/ImportScopeCalculation.ipynb @@ -21,9 +21,13 @@ "cell_type": "markdown", "source": [ "", - "\n

Import Scopes (IFRS17 Methodology Business Logic)

", - "\n", - "\nThis notebook contains the logic used to perform calculations upon import of data (actuals and cashflows). This is also called 'Data Loading' and the concept of Scope is used here to define the logic and provide the means of executing the logic." + "\n

Import Scopes (IFRS17 Methodology Business Logic)

" + ] + }, + { + "cell_type": "markdown", + "source": [ + "This notebook contains the logic used to perform calculations upon import of data (actuals and cashflows). This is also called 'Data Loading' and the concept of Scope is used here to define the logic and provide the means of executing the logic." ] }, { @@ -378,9 +382,7 @@ { "cell_type": "markdown", "source": [ - "The exact structure being return depends on the **order** of the AoC Steps (which is set by the [AoC Type](../DataModel/DataStructure#aoc-type)), and on which AoC steps exist.", - "\n", - "\nFor an example of the usage of the AocStep scope see [here](../Test/AocStructureTest)." + "The exact structure being return depends on the **order** of the AoC Steps (which is set by the [AoC Type](../DataModel/DataStructure#aoc-type)), and on which AoC steps exist." ] }, { @@ -443,12 +445,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "For an example of these calculations see [here](../Test/SpecificationsImportCashflows#interest-and-discount-rates)." - ] - }, { "cell_type": "markdown", "source": [ @@ -505,12 +501,6 @@ "For a given month $i$ they are denoted as $\\rm{Nominal}_i$." ] }, - { - "cell_type": "markdown", - "source": [ - "For an example of nominal cashflow values see [here](../Test/SpecificationsImportCashflows#nominal-cashflow)." - ] - }, { "cell_type": "markdown", "source": [ @@ -574,12 +564,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "For example calculations for Cumulated Discounted Cashflows see [here](../Test/SpecificationsImportCashflows#cumulated-discounted-cashflow)." - ] - }, { "cell_type": "markdown", "source": [ @@ -620,12 +604,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "Examples of Telescoping Difference calculations for different AoC steps start [here](../Test/SpecificationsImportCashflows#modelcorrections)." - ] - }, { "cell_type": "markdown", "source": [ @@ -672,12 +650,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "An example of Projected Present Value calculations can be found [here](../Test/SpecificationsImportCashflows#present-value)." - ] - }, { "cell_type": "markdown", "source": [ @@ -750,12 +722,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "An example of the Interest Accretion calculations can be found [here](../Test/SpecificationsImportCashflows#interest-accretion)." - ] - }, { "cell_type": "markdown", "source": [ @@ -841,12 +807,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "An example of the Present Value Base calculations can be found [here](../Test/SpecificationsImportCashflows#present-value)." - ] - }, { "cell_type": "markdown", "source": [ @@ -926,7 +886,7 @@ "", "\n## Risk Adjustment", "\n", - "\nRisk Adjustment values ($\\rm{RA}$) are accessible from the [PV Base](#present-value-base) data and have [Calculation Type](../DataModel/DataStructure#calculation-type) $RA$. In particular, the Locked-In and Current values are given by:", + "\nRisk Adjustment values ($\\rm{RA}$) are accessible from the [PresentValue](#present-value-base) data and have [Estimate Type](../DataModel/DataStructure#estimate-type) $RA$. In particular, the Locked-In and Current values are given by:", "\n", "\n$$", "\n\\text{RA Locked}(\\text{AoC step}) = \\text{PV}(\\text{AoC step})|_{\\text{Calculation Type = RA},~ \\text{Economic Basis = L}}", @@ -990,7 +950,7 @@ "\nThe coverage unit (CU) of a GIC is introduced in the standard as the quantity of the service provided in that GIC. The service is", "\nmeasured by considering the quantity of benefits provided as well as the expected coverage period of the GIC.", "\n", - "\nThe cashflows of coverage units are retrieved from the discounted cashflows with [Calculation Type](../DataModel/DataStructure#calculation-type) CU." + "\nThe cashflows of coverage units are retrieved from the discounted cashflows with [EstimateType](../DataModel/DataStructure#estimate-type) CU." ] }, { @@ -1165,12 +1125,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "An example of Actual Base figures can be found [here](../Test/SpecificationsImportActuals#base-actual)." - ] - }, { "cell_type": "markdown", "source": [ @@ -1207,7 +1161,7 @@ "", "\n### Advance Actuals", "\n", - "\n**Advance Actuals** are those cashflows with due date inside the reporting period but which occured *before* the reporting period - They include:", + "\nAdvance Actuals are cash flows with due date inside the reporting period but occured *before* the reporting period - They include:", "\n- Receivable Claims", "\n- Receivable Expenses", "\n- Payable Premiums", @@ -1242,7 +1196,7 @@ "", "\n### Overdue Actuals", "\n", - "\n**Overdue Actuals** are those cashflows with due date inside the reporting period but which occur *after* the reporting period - They contain:", + "\nOverdue Actuals are cash flows with due date inside the reporting period but occur *after* the reporting period - They contain:", "\n- Payable Claims", "\n- Payable Expenses", "\n- Receivable Premiums", @@ -1341,12 +1295,6 @@ "\n}" ] }, - { - "cell_type": "markdown", - "source": [ - "An example of Deferrable Actual figures can be found [here](../Test/SpecificationsImportActuals#deferrable-actual)." - ] - }, { "cell_type": "markdown", "source": [ @@ -1480,7 +1428,7 @@ "\n\\big(PV_{\\text{Novelty = I}} + PV_{\\text{Novelty = N}} \\big) - \\big( \\text{Actual}_{\\text{Novelty=C}} + \\text{Advance Actual}_{\\text{Novelty=C}}+ \\text{Overdue Actual}_{\\text{Novelty=C}} \\big) ~,", "\n$$", "\n", - "\nwhere the AoC Step **CF** is implicit for all formulas, $PV$ is the [present value](#present-value) with Calculation Type **BE**, and Actuals have Estimate Types **A**, **AA**, and **OA** (see details [here](#actual-values))." + "\nwhere the AoC Step **CF** is implicit for all formulas, $PV$ is the [present value](#present-value) with Estimate Type **BE**, and Actuals have Estimate Types **A**, **AA**, and **OA** (see details [here](#actual-values))." ] }, { diff --git a/ifrs17/Import/Importers.ipynb b/ifrs17/Import/Importers.ipynb index f2963181..cd3fe8a0 100644 --- a/ifrs17/Import/Importers.ipynb +++ b/ifrs17/Import/Importers.ipynb @@ -347,7 +347,7 @@ { "cell_type": "code", "source": [ - "Import.DefineFormat(\"AocConfiguration\", async (options, dataSet) => {", + "Import.DefineFormat(ImportFormats.AocConfiguration, async (options, dataSet) => {", "\n Activity.Start();", "\n var workspace = Workspace.CreateNew();", "\n workspace.InitializeFrom(options.TargetDataSource);", diff --git a/ifrs17/OverviewCalculationEngine.ipynb b/ifrs17/OverviewCalculationEngine.ipynb index 108756ef..3045ed95 100644 --- a/ifrs17/OverviewCalculationEngine.ipynb +++ b/ifrs17/OverviewCalculationEngine.ipynb @@ -104,9 +104,7 @@ "\n", "\nHowever, the import as such is conducted by other notebooks which use the methods of ImportStorage and ImportScopeCalculation in a chain of notebook imports:", "\n", - "\nImportStorage --> ImportScopeCalculation --> [Importers](./Import/Importers#importers) --> [InitSystemorphBaseToMemory](./Initialization/InitSystemorphBaseToMemory#init-base-to-memory) --> [InitSystemorphToMemory](./Initialization/InitSystemorphToMemory#init-base-to-memory).", - "\n", - "\nThe latter two notebooks initialize and store the imported and derived data in memory for further usage. To store the data in a physical database, [InitSystemorphToDatabase](./Initialization/InitSystemorphToDatabase#init-to-database) can be employed.", + "\nImportStorage --> ImportScopeCalculation --> [Importers](./Import/Importers#importers) ", "\n", "\nThe calculations of ImportScopeCalculation cover a large part of the IFRS 17 methodology and are explained in the section below." ] diff --git a/ifrs17/README.md b/ifrs17/README.md index 4447c0c3..9891b004 100644 --- a/ifrs17/README.md +++ b/ifrs17/README.md @@ -23,9 +23,7 @@ You will be introduced to ## Got Questions -For support around the IFRS17 CalculationEngine you can personally reach out to one of our IFRS17 experts: -- [Dr. Andrea Muolo]() -- [Dr. Davide Colleoni](https://www.linkedin.com/in/davidecolleoni/) -- [Mrs. Sara Busato]() +For support around the IFRS 17 CalculationEngine get in contact with our Community: -If you are interested in adapting the IFRS17 CalculationEngine to your data and would like to start a collaboration with us, you can contact [Wolfgang Maehr]() \ No newline at end of file +- [Community]() -link to the community page- +- [Evangelists]() -link to Evangelists page- \ No newline at end of file diff --git a/ifrs17/Report/Reports.ipynb b/ifrs17/Report/Reports.ipynb deleted file mode 100644 index 91d3d680..00000000 --- a/ifrs17/Report/Reports.ipynb +++ /dev/null @@ -1,410 +0,0 @@ -{ - "metadata": { - "authors": [], - "kernelspec": { - "display_name": "Formula Framework", - "language": "C#", - "name": "C#" - }, - "language_info": { - "file_extension": ".cs", - "mimetype": "text/plain", - "name": "C#" - }, - "toc-autonumbering": "True", - "toc-showcode": "False" - }, - "nbformat": 4, - "nbformat_minor": 5, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "

Reports

", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Infrastructure and Configuration" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Initialize data" - ] - }, - { - "cell_type": "code", - "source": [ - "/* DataSource is configured and connected to real database */", - "\n//#!eval-notebook \"../Database/Configure\"" - ] - }, - { - "cell_type": "code", - "source": [ - "#!eval-notebook \"../Initialization/InitSystemorphToMemory\"" - ] - }, - { - "cell_type": "code", - "source": [ - "Workspace.InitializeFrom(DataSource);" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Imports and Configurations" - ] - }, - { - "cell_type": "code", - "source": [ - "#!import \"ReportScopes\"" - ] - }, - { - "cell_type": "code", - "source": [ - "var reportStorage = new ReportStorage(Workspace, Report);", - "\nawait reportStorage.InitializeReportIndependentCacheAsync();", - "\nvar mostRecentPartition = (await Workspace.Query().Where(x => x.Scenario == null).OrderBy(x => x.Year).ThenBy(x => x.Month).ToArrayAsync()).Last();", - "\nvar reportingNodeRoot = (await Workspace.Query().Where(x => x.Parent == null).ToArrayAsync()).First().SystemName;", - "\nawait reportStorage.InitializeAsync((mostRecentPartition.Year, mostRecentPartition.Month), reportingNodeRoot, null, CurrencyType.Contractual);", - "\nvar identities = reportStorage.GetIdentities((mostRecentPartition.Year, mostRecentPartition.Month), reportingNodeRoot, null, CurrencyType.Contractual);" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Calling Scope" - ] - }, - { - "cell_type": "code", - "source": [ - "var universe = Scopes.ForSingleton().WithStorage(reportStorage).ToScope();" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Report Settings and Storage Update" - ] - }, - { - "cell_type": "code", - "source": [ - "((int Year, int Month) Period, string ReportingNode, string Scenario, CurrencyType CurrencyType) Args =", - "\n //((2020, 12), reportingNodeRoot, null,CurrencyType.Contractual)", - "\n ((2021, 3), reportingNodeRoot, null,CurrencyType.Contractual)", - "\n //((2021, 3), reportingNodeRoot, null,CurrencyType.Functional)", - "\n //((2021, 3), reportingNodeRoot, null,CurrencyType.Group)", - "\n ;", - "\n", - "\nawait reportStorage.InitializeAsync(Args.Period, Args.ReportingNode, Args.Scenario, Args.CurrencyType);", - "\nidentities = reportStorage.GetIdentities(Args.Period, Args.ReportingNode, Args.Scenario, Args.CurrencyType);" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Data Constellation", - "\n", - "\nWe have " - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Present Value", - "\n", - "\nPresent values of the best estimate of future cashflows are shown here in an Analysis of Change report.", - "\n", - "\nThe report view can be modified with the Slice options for the columns by changing the SliceColumnBy inputs in the next command cell.", - "\nThe figures displayed in the report are automatically aggregated to meet the granularity desired by the user.", - "\n", - "\nCurrently, the data is sliced by :", - "\n- CurrencyType", - "\n- LiabilityType", - "\n- EconomicBasis", - "\n", - "\nFor example one can add \"GroupOfContract\" to separate the contributions of the individual Group of Contracts.", - "\n
We suggest to add this slice between the \"LiabilityType\" and the \"EconomicBasis\" as the the order of the inputs corresponds to the order of the columns shown in the report to expand the data." - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().LockedBestEstimate + universe.GetScopes(identities).Aggregate().CurrentBestEstimate)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\", \"EconomicBasis\") //\"GroupOfContract\"", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Risk Adjustment" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().LockedRiskAdjustment + universe.GetScopes(identities).Aggregate().CurrentRiskAdjustment)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"EconomicBasis\", \"LiabilityType\",\"GroupOfContract\")", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Actuals" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().Written", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"AmountType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\",\"GroupOfContract\")", - "\n .ReportGridOptions(reportHeight: 450)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Advance, Overdue Actuals" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().Advance + universe.GetScopes(identities).Aggregate().Overdue)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\",\"GroupOfContract\", \"EstimateType\")", - "\n .ReportGridOptions(reportHeight: 400)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Deferrable Actuals" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().Deferrals", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\",\"GroupOfContract\")", - "\n .ReportGridOptions(reportHeight: 400)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Fulfilment Cashflow" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().Fcf ", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\",\"GroupOfContract\", \"EconomicBasis\")//, \"EstimateType\")//, \"AmountType\")", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Actuarial Experience Adjustment" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().ActuarialExperienceAdjustment", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"EstimateType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"GroupOfContract\", \"AmountType\" )//\"LiabilityType\", \"EstimateType\")", - "\n .ReportGridOptions(reportHeight: 300, headerColumnWidth: 300)", - "\n .ToReport() " - ] - }, - { - "cell_type": "markdown", - "source": [ - "# LRC Technical Margin" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().LrcTechnicalMargin", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"GroupOfContract\")", - "\n .ReportGridOptions(reportHeight: 600)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Contractual Service Margin / Loss Component / Loss Recovery Component" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().Csm + universe.GetScopes(identities).Aggregate().Lc + universe.GetScopes(identities).Aggregate().Loreco)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"GroupOfContract\", \"EstimateType\")", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# LRC Actuarial" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().LrcActuarial)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), /*\"LiabilityType\",\"GroupOfContract\",*/ \"EstimateType\")", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# LRC" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().Lrc)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType),\"GroupOfContract\", \"EstimateType\")", - "\n .ReportGridOptions(300)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# LIC Actuarial" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().LicActuarial)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"Novelty\",\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), /*\"GroupOfContract\",*/ \"EstimateType\")", - "\n .ReportGridOptions()", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# LIC" - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube((universe.GetScopes(identities).Aggregate().Lic)", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"VariableType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), /*\"GroupOfContract\",*/ \"EstimateType\")", - "\n .ReportGridOptions(300)", - "\n .ToReport()" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Financial Performance", - "\n", - "\nUse the expand and collapse buttons in the report rows to change the granularity of the figures displayed." - ] - }, - { - "cell_type": "code", - "source": [ - "Report.ForDataCube(universe.GetScopes(identities).Aggregate().FinancialPerformance", - "\n //.Filter((\"GroupOfContract\", \"DT1.1\"))", - "\n )", - "\n .WithQuerySource(DataSource)", - "\n .SliceRowsBy(\"VariableType\", \"EstimateType\")", - "\n .SliceColumnsBy(CurrencyGrouper(Args.CurrencyType), \"LiabilityType\",\"GroupOfContract\")", - "\n .ReportGridOptions(reportHeight: 900, headerColumnWidth: 500, groupDefaultExpanded: 3)", - "\n .ToReport()" - ] - }, - { - "cell_type": "code", - "source": [ - "" - ] - } - ] -} \ No newline at end of file