[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 1087aa8 1/5: Remove old XSL-FO implementation
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 1087aa8 1/5: Remove old XSL-FO implementation [364] |
Date: |
Fri, 12 Oct 2018 13:47:22 -0400 (EDT) |
branch: master
commit 1087aa8e39d427c2f55d46899deef91934986f8c
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Remove old XSL-FO implementation [364]
Cf. commit 919d79671214.
---
Makefile.am | 11 -
emit_ledger.cpp | 2 -
fo_common.xsl | 1002 ----------------------------
illustration_reg.xsl | 1805 --------------------------------------------------
ledger.hpp | 10 -
ledger_base.cpp | 7 -
ledger_base.hpp | 4 +-
ledger_pdf.cpp | 41 --
ledger_xml_io.cpp | 955 --------------------------
ledger_xsl.cpp | 163 -----
ledger_xsl.hpp | 38 --
nasd.xsl | 1283 -----------------------------------
objects.make | 7 -
reg_d_group.xsl | 912 -------------------------
reg_d_individual.xsl | 1022 ----------------------------
15 files changed, 1 insertion(+), 7261 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 8f3cec5..ed5abc5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -293,11 +293,6 @@ wx_test_LDADD = \
# libraries
-# PDF !! Expunge these two object files
-# ledger_xml_io.o
-# ledger_xsl.o
-# from the list below.
-
liblmi_common_sources = \
actuarial_table.cpp \
alert.cpp \
@@ -347,8 +342,6 @@ liblmi_common_sources = \
ledger_text_formats.cpp \
ledger_variant.cpp \
ledger_variant_init.cpp \
- ledger_xml_io.cpp \
- ledger_xsl.cpp \
ledgervalues.cpp \
license.cpp \
loads.cpp \
@@ -1155,9 +1148,6 @@ test_zero_CXXFLAGS = $(AM_CXXFLAGS)
# headers: we need to include them or they wouldn't appear in the distribution
# this list should contain everything in `ls *.h *.hpp *.tpp *.xpp`
-# PDF !! Expunge this header
-# ledger_xsl.hpp
-# from the list below.
noinst_HEADERS = \
about_dialog.hpp \
account_value.hpp \
@@ -1258,7 +1248,6 @@ noinst_HEADERS = \
ledger_pdf.hpp \
ledger_text_formats.hpp \
ledger_variant.hpp \
- ledger_xsl.hpp \
ledgervalues.hpp \
license.hpp \
lmi.hpp \
diff --git a/emit_ledger.cpp b/emit_ledger.cpp
index 3e64016..c7e9922 100644
--- a/emit_ledger.cpp
+++ b/emit_ledger.cpp
@@ -32,8 +32,6 @@
#include "ledger.hpp"
#include "ledger_pdf.hpp"
#include "ledger_text_formats.hpp"
-// PDF !! Expunge the next line:
-#include "ledger_xsl.hpp"
#include "miscellany.hpp" // ios_out_trunc_binary()
#include "path_utility.hpp" // unique_filepath()
#include "timer.hpp"
diff --git a/fo_common.xsl b/fo_common.xsl
deleted file mode 100644
index 30d5ceb..0000000
--- a/fo_common.xsl
+++ /dev/null
@@ -1,1002 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Common part of various illustrations.
-
- Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018 Gregory W. Chicares.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
- http://savannah.nongnu.org/projects/lmi
- email: <address@hidden>
- snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp " ">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
-
- <!--
- Used in an expression like translate($sometext, $lcletters, $ucletters)
- to transform $sometext into uppercase.
- -->
- <xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
- <xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
-
- <!--
- Strip commas from numbers:
- translate($string_Representation_of_a_number, $numberswc, $numberswoc).
- -->
- <xsl:variable name="numberswoc">0123456789</xsl:variable>
- <xsl:variable name="numberswc">0123456789,</xsl:variable>
-
- <!--
- Global parameter, that controls the output media size.
- Refer to http://en.wikipedia.org/wiki/Paper_size for details.
- North American paper size standards are accepted:
- 'letter', 'legal', 'emperor'.
- Any unknown page size keyword is treated as 'letter'.
- -->
- <xsl:param name="page-type" select="'letter'"/>
- <!-- Page orientation has to be 'portrait' or 'landscape' -->
- <xsl:param name="page-orientation" select="'portrait'"/>
-
- <!--
- Define this parameter to true to exclude company logo. This should be useful
- for text output where any graphics is replaced by a grid of '#' symbols.
- (This was overengineering: no use case exists to justify the complexity,
- so it is okay to ignore this.)
- -->
- <xsl:param name="hide-company-logo" select="boolean(0)"/>
-
- <!--
- In some xsl:for-each loop we could iterate over a node set from some
- other document (not the current document being transformed, for example
- we could iterate over a list of columns from the separate format file
- to generate a list of available columns).
-
- In such a case inside the loop the root node '/' binds to the root node
- of that external document and we cannot use '/illustration' no longer
- to access our current xml data.
- Use the global variable '$illustration' to access the data.
- -->
- <xsl:variable name="illustration" select="/illustration"/>
-
- <!--
- Prepare to use new format of XML input files:
- The $scalars variable below should become
- "/illustration/string_scalar | /illustration/double_scalar"
- -->
- <xsl:variable name="scalars" select="/illustration/scalar"/>
-
- <!--
- Prepare to use new format of XML input files:
- The $vectors variable below should become
- "/illustration/string_vector | /illustration/double_vector"
- -->
- <xsl:variable name="vectors" select="/illustration/data/newcolumn/column"/>
-
- <xsl:variable name="max-lapse-year-text">
- <xsl:call-template name="get-max-lapse-year"/>
- </xsl:variable>
- <xsl:variable name="max-lapse-year" select="number($max-lapse-year-text)"/>
-
- <!--
- Prepare to use new format of XML input files:
- The $supplemental_report variable below should become
- "/illustration/supplementalreport"
- -->
- <xsl:variable name="supplemental_report"
select="$illustration/supplementalreport"/>
- <xsl:variable name="NO_SUPPLEMENTAL_COLUMN" select="'[none]'"/>
-
- <!--
- Prepare to use new format of XML input files:
- The $supplemental_report_columns variable below should become
- "$supplemental_report/column"
- -->
- <xsl:variable name="supplemental_report_columns"
select="$supplemental_report/columns"/>
-
- <xsl:variable name="has_supplemental_report"
select="boolean($scalars/SupplementalReport='1')"/>
-
- <!--
- Frequently used value. For a composite case the variable is_composite is
true.
- -->
- <xsl:variable name="is_composite" select="boolean($scalars/Composite='1')"/>
-
- <!-- Page size in a form of 'width x height' (portrait orientation) -->
- <xsl:variable name="page-size">
- <xsl:choose>
- <xsl:when test="$page-type='legal'">
- 8.5in x 14in
- </xsl:when>
- <xsl:when test="$page-type='emperor'">
- 48in x 72in
- </xsl:when>
- <xsl:otherwise><!-- fall back to 'letter' -->
- 8.5in x 11in
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <!-- These variables should be used in every 'simple-page-master'. -->
- <xsl:variable name="portrait-width"
select="normalize-space(substring-before($page-size, 'x'))"/>
- <xsl:variable name="portrait-height"
select="normalize-space(substring-after($page-size, 'x'))"/>
- <!-- Account for page orientation in a form 'horizontal x vertical' -->
- <xsl:variable name="page-geometry">
- <xsl:choose>
- <xsl:when test="$page-orientation='landscape'">
- <xsl:value-of select="concat($portrait-height,' x ',$portrait-width)"/>
- </xsl:when>
- <xsl:otherwise><!-- fall back to 'portrait' -->
- <xsl:value-of select="concat($portrait-width,' x ',$portrait-height)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <!-- These variables should be used in every 'simple-page-master'. -->
- <xsl:variable name="page-width"
select="normalize-space(substring-before($page-geometry, 'x'))"/>
- <xsl:variable name="page-height"
select="normalize-space(substring-after($page-geometry, 'x'))"/>
-
- <!--
- Helper template to be used in 'fo:simple-page-master' to improve readability.
- Use template parameters 'width' and 'height' to override default page size.
- -->
- <xsl:template name="set-page-size">
- <xsl:param name="width" select="$page-width"/>
- <xsl:param name="height" select="$page-height"/>
- <xsl:attribute name="page-width"><xsl:value-of
select="$width"/></xsl:attribute>
- <xsl:attribute name="page-height"><xsl:value-of
select="$height"/></xsl:attribute>
- <xsl:attribute name="margin">.25in .25in .1in</xsl:attribute>
- </xsl:template>
-
- <xsl:variable name="compliance_tracking_string">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- <xsl:if test="$scalars/Composite='1'">
- <xsl:value-of select="$scalars/ImprimaturPresaleComposite"/>
- </xsl:if>
- <xsl:if test="$scalars/Composite!='1'">
- <xsl:value-of select="$scalars/ImprimaturPresale"/>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="$scalars/Composite='1'">
- <xsl:value-of select="$scalars/ImprimaturInforceComposite"/>
- </xsl:if>
- <xsl:if test="$scalars/Composite!='1'">
- <xsl:value-of select="$scalars/ImprimaturInforce"/>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <!-- Suppose that the number does not contain leading/trailing spaces -->
- <xsl:variable name="compliance_tracking_number"
select="normalize-space($compliance_tracking_string)"/>
-
- <!--
- This may appear to be a clumsy way to get the max value but there is no
clean way
- to do this with the available XSL functionality and the values being distinct
- entities. The way it is done in Calculation Summary and all examples to be
found
- have the values grouped in a common node within the XML. Simplified example:
- <values>
- <value>55</value>
- <value>45</value>
- <value>50</value>
- <value>40</value>
- </values>
- Note: illustration_reg cases do not currently have LapseYear_CurrentZero and
- LapseYear_GuaranteedZero in their XML. We rely on the fact that an inexistent
- node evaluates to zero in a comparison expression.
- -->
- <xsl:template name="get-max-lapse-year">
- <xsl:call-template name="max-comparison">
- <xsl:with-param name="value1">
- <xsl:call-template name="max-comparison">
- <xsl:with-param name="value1" select="$scalars/LapseYear_Current"/>
- <xsl:with-param name="value2"
select="$scalars/LapseYear_Guaranteed"/>
- </xsl:call-template>
- </xsl:with-param>
- <xsl:with-param name="value2">
- <xsl:call-template name="max-comparison">
- <xsl:with-param name="value1"
select="$scalars/LapseYear_CurrentZero"/>
- <xsl:with-param name="value2"
select="$scalars/LapseYear_GuaranteedZero"/>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:template>
-
- <!-- Return the maximum of two values -->
- <xsl:template name="max-comparison">
- <xsl:param name="value1"/>
- <xsl:param name="value2"/>
- <xsl:choose>
- <xsl:when test="$value1 < $value2">
- <xsl:value-of select="$value2"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$value1"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- Print Dollar Units
- This template is common to all the illustration xsl templates.
- Originally it has appeared in files with minor differences such as:
- * explicitly specified text alignment, font size or not specified;
- * parentheses added around the text or omitted;
- * an extra space added just before the text.
- -->
- <xsl:template name="dollar-units">
- <fo:block text-align="center" font-size="9pt" padding-top="1em">
- <xsl:text>Values shown are in </xsl:text>
- <xsl:choose>
- <xsl:when test="$scalars/ScaleUnit=''">
- <xsl:text>dollars</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/ScaleUnit"/>
- <xsl:text>s of dollars</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:template>
-
- <!-- Generate widely used text snippet 'PrepMonth PrepDay, PrepYear' -->
- <xsl:template name="date-prepared">
- <xsl:value-of select="$scalars/PrepMonth"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="$scalars/PrepDay"/>
- <xsl:text>, </xsl:text>
- <xsl:value-of select="$scalars/PrepYear"/>
- </xsl:template>
-
- <!--
- Helper 'attributes' template for a table cell.
- Included inside a fo:table-cell, this template adds common cell padding,
- text alignment (align text toward bottom-right cell corner).
- Also set (possible) bottom border properties.
- -->
- <xsl:template name="header-cell">
- <xsl:attribute name="display-align">after</xsl:attribute>
- <xsl:attribute name="padding-top">4pt</xsl:attribute>
- <xsl:attribute name="padding-bottom">2pt</xsl:attribute>
- <xsl:attribute name="text-align">right</xsl:attribute>
- <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
- <xsl:attribute name="border-bottom-color">#002F6C</xsl:attribute>
- </xsl:template>
- <!--
- Same as 'header-cell', but add a bottom border of 1pt.
- -->
- <xsl:template name="header-cell-with-border">
- <xsl:call-template name="header-cell"/>
- <xsl:attribute name="border-bottom-width">1pt</xsl:attribute>
- </xsl:template>
-
- <!-- Generate supplemental report data table -->
- <xsl:template name="supplemental-report-body">
- <xsl:if test="count($supplemental_report_columns) > 0">
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns"
select="$supplemental_report_columns"/>
- </xsl:call-template>
- <!--
- TODO ?? Use 'generate-table-header' generic template
- to print table column headers.
- -->
- <fo:table-header>
- <fo:table-row>
- <xsl:for-each select="$supplemental_report_columns">
- <fo:table-cell>
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>
- <xsl:call-template name="text-word-wrap">
- <xsl:with-param name="text" select="./title"/>
- </xsl:call-template>
- </fo:block>
- </fo:table-cell>
- </xsl:for-each>
- </fo:table-row>
- <!-- Additional empty row to add spacing after the header -->
- <fo:table-row>
- <fo:table-cell padding="2pt">
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-header>
- <!-- Supplemental report table body -->
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- <xsl:with-param name="columns"
select="$supplemental_report_columns"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- <xsl:if test="$has_supplemental_report">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </xsl:if>
- </xsl:template>
-
- <!--
- Generate table columns list.
- If a column has no name attribute (or an empty one) treat it
- as a small separator. Also treat a <spacer/> node as a wide separator.
- -->
- <xsl:template name="generate-table-columns">
- <xsl:param name="columns"/>
- <xsl:for-each select="$columns">
- <xsl:variable name="empty_column" select="boolean(not(./name) and
not(@name) and not(@scalar) and not(@special))"/>
- <xsl:variable name="is_spacer" select="name() = 'spacer'"/>
- <fo:table-column>
- <xsl:choose>
- <xsl:when test="$empty_column and not($is_spacer)">
- <xsl:attribute
name="column-width">proportional-column-width(33)</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute
name="column-width">proportional-column-width(100)</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- </fo:table-column>
- </xsl:for-each>
- <fo:table-column column-width="proportional-column-width(1)"/>
- </xsl:template>
-
- <!--
- Determine the minimum number of rows needed to correctly show column headers.
- Every column can spawn over multiple rows. This template return the maximum
- number of rows.
- -->
- <xsl:template name="get-max-header-rows">
- <xsl:param name="columns"/>
- <xsl:param name="column"/>
- <xsl:param name="row"/>
- <xsl:choose>
- <xsl:when test="count($columns) = 0">0</xsl:when>
- <xsl:when test="($row = 1) and ($column = count($columns))">1</xsl:when>
- <xsl:otherwise>
- <xsl:variable name="text">
- <xsl:call-template name="get-text-nth-line">
- <xsl:with-param name="text" select="$columns[$column]"/>
- <xsl:with-param name="n" select="$row"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="this_result">
- <xsl:if test="$text=''">0</xsl:if>
- <xsl:if test="$text!=''"><xsl:value-of select="$row"/></xsl:if>
- </xsl:variable>
- <xsl:variable name="recursive_result">
- <xsl:choose>
- <xsl:when test="($column != count($columns))">
- <xsl:call-template name="get-max-header-rows">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="column" select="($column + 1)"/>
- <xsl:with-param name="row" select="$row"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="get-max-header-rows">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="column" select="1"/>
- <xsl:with-param name="row" select="($row - 1)"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:call-template name="max-comparison">
- <xsl:with-param name="value1"
select="number(normalize-space($this_result))"/>
- <xsl:with-param name="value2"
select="number(normalize-space($recursive_result))"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- A generic template that generates data-table header rows.
- Simply calls 'generate-table-header-row' with initial values.
- Additionally adds a blank header row separating the header cells from
- value cells.
- -->
- <xsl:template name="generate-table-headers">
- <xsl:param name="columns"/>
- <xsl:variable name="max-rows">
- <xsl:call-template name="get-max-header-rows">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="column" select="1"/>
- <xsl:with-param name="row" select="10"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:call-template name="generate-table-header-row">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="row" select="1"/>
- <xsl:with-param name="max-rows"
select="number(normalize-space($max-rows))"/>
- </xsl:call-template>
- <!--
- TODO ?? This monstrosity adds an extra space between table headers
- and table data.
- -->
- <fo:table-row>
- <fo:table-cell padding="2pt">
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </xsl:template>
-
- <!--
- Output data table header row and recursively call itself until all rows
- are produced.
- Table header rows are printed using 'generate-table-header-cell' which
- does merging of the header-cells when the adjacent cells have the same text.
- See 'generate-table-header-cell' description for an explanation.
- -->
- <xsl:template name="generate-table-header-row">
- <xsl:param name="columns"/>
- <xsl:param name="row"/>
- <xsl:param name="max-rows"/>
- <xsl:if test="count($columns) > 0">
- <fo:table-row>
- <xsl:call-template name="generate-table-header-cell">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="row" select="$row"/>
- <xsl:with-param name="last_row" select="boolean($row = $max-rows)"/>
- <xsl:with-param name="cell" select="1"/>
- </xsl:call-template>
- </fo:table-row>
- <xsl:if test="$row < $max-rows">
- <xsl:call-template name="generate-table-header-row">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="row" select="$row + 1"/>
- <xsl:with-param name="max-rows" select="$max-rows"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:template>
-
- <!--
- Output cell text (and recursively continue).
- The main complexity comes from rendering the common header cell prefix
- spawned over multiple columns. Example:
- <column>Policy |Year</column>
- <column>Benefit|Guaranteed</column>
- <column>Benefit|Current</column>
- will be rendered like so (ASCII graphics):
- /===============================\
- | Policy | Benefit |
- |========+======================|
- | Year | Guaranteed | Current |
- |========+============+=========|
- | [table data] |
- Note how the common header cell 'Benefit' is spawned over two columns.
- -->
- <xsl:template name="generate-table-header-cell">
- <xsl:param name="columns"/>
- <xsl:param name="row"/>
- <xsl:param name="last_row"/>
- <xsl:param name="cell"/>
- <xsl:param name="spans" select="1"/>
- <xsl:variable name="cell_text">
- <xsl:call-template name="get-text-nth-line">
- <xsl:with-param name="text" select="string($columns[$cell])"/>
- <xsl:with-param name="n" select="$row"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="next_cell_text">
- <xsl:if test="$cell < count($columns)">
- <xsl:call-template name="get-text-nth-line">
- <xsl:with-param name="text" select="string($columns[$cell + 1])"/>
- <xsl:with-param name="n" select="$row"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:variable>
- <xsl:if test="($cell_text != $next_cell_text) or ($cell =
count($columns))">
- <fo:table-cell number-columns-spanned="{$spans}">
- <xsl:call-template name="header-cell"/>
- <xsl:if test="$spans != 1">
- <xsl:attribute name="text-align">center</xsl:attribute>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="$last_row or (($spans > 1) and ($cell_text !=
''))">
- <xsl:attribute name="border-bottom-width">1pt</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="border-bottom-width">0pt</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:call-template name="text-word-wrap">
- <xsl:with-param name="text" select="$cell_text"/>
- </xsl:call-template>
- </fo:table-cell>
- </xsl:if>
- <xsl:if test="$cell < count($columns)">
- <xsl:choose>
- <xsl:when test="$cell_text = $next_cell_text">
- <xsl:call-template name="generate-table-header-cell">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="row" select="$row"/>
- <xsl:with-param name="last_row" select="$last_row"/>
- <xsl:with-param name="cell" select="$cell + 1"/>
- <xsl:with-param name="spans" select="$spans + 1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="generate-table-header-cell">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="row" select="$row"/>
- <xsl:with-param name="last_row" select="$last_row"/>
- <xsl:with-param name="cell" select="$cell + 1"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:template>
-
- <!--
- A single character indicates that a column title has to be spawned over
- multiple cells in the table header. Example:
- <column>Policy |Year</column>
- <column>Benefit|Current</column>
- will be rendered like so (ASCII graphics):
- /==================\
- | Policy | Benefit |
- |========+=========|
- | Year | Current |
- |========+=========|
- | [table data] |
- -->
- <xsl:variable name="CELL_WRAPPER" select="'|'"/>
-
- <xsl:template name="get-text-nth-line">
- <!-- The text to split into lines -->
- <xsl:param name="text"/>
- <!-- Index (starting from 1) of the line to return -->
- <xsl:param name="n"/>
- <xsl:choose>
- <xsl:when test="starts-with($text, ' ')">
- <!-- chop off the leading junk character -->
- <xsl:call-template name="get-text-nth-line">
- <xsl:with-param name="text" select="substring($text, 2)"/>
- <xsl:with-param name="n" select="$n"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="($n = 1) and contains($text, $CELL_WRAPPER)">
- <xsl:value-of select="normalize-space(substring-before($text,
$CELL_WRAPPER))"/>
- </xsl:when>
- <xsl:when test="($n = 1)"><!-- and not(contains($text, $CELL_WRAPPER))
-->
- <xsl:value-of select="normalize-space($text)"/>
- </xsl:when>
- <xsl:when test="contains($text, $CELL_WRAPPER)"><!-- and ($n != 1) -->
- <xsl:call-template name="get-text-nth-line">
- <xsl:with-param name="text" select="substring-after($text,
$CELL_WRAPPER)"/>
- <xsl:with-param name="n" select="($n - 1)"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise><!-- ($n != 1) and not(contains($text, $CELL_WRAPPER)) -->
- <!-- The text does not have nth line. Return nothing -->
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- A single character that indicates that a column title has to be split
- in this place into two separate lines.
- For example if a column has title 'Policy _Year', then the output file
- will contain:
- <fo:block>Policy</fo:block>
- <fo:block>Year</fo:block>
- Which will result in two separate lines.
- Note: TEXT_LINE_WRAPPER must be exactly one symbol.
- -->
- <xsl:variable name="TEXT_LINE_WRAPPER" select="'_'"/>
- <!--
- Prepare the column title for a table-header cell - split it into lines using
- the special symbol $TEXT_LINE_WRAPPER (underscore by default), and wrap-up
- each line into <fo:block> so that FOP does not change word wrapping.
- This way we control the way the column titles are shown.
- -->
- <xsl:template name="text-word-wrap">
- <!-- The text to split into lines -->
- <xsl:param name="text"/>
- <!-- Do we treat the leading $TEXT_LINE_WRAPPERs as junk? -->
- <xsl:param name="is_dirty" select="boolean(0)"/>
- <xsl:choose>
- <xsl:when test="starts-with($text, ' ') or ($is_dirty and
starts-with($text, $TEXT_LINE_WRAPPER))">
- <!-- chop off the leading junk character -->
- <xsl:call-template name="text-word-wrap">
- <xsl:with-param name="text" select="substring($text, 2)"/>
- <xsl:with-param name="is_dirty" select="boolean($is_dirty) and
starts-with($text, $TEXT_LINE_WRAPPER)"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="contains($text, $TEXT_LINE_WRAPPER)">
- <xsl:call-template name="text-word-wrap">
- <xsl:with-param name="text" select="substring-before($text,
$TEXT_LINE_WRAPPER)"/>
- <xsl:with-param name="is_dirty" select="boolean(1)"/>
- </xsl:call-template>
- <xsl:call-template name="text-word-wrap">
- <xsl:with-param name="text" select="substring-after($text,
$TEXT_LINE_WRAPPER)"/>
- <xsl:with-param name="is_dirty" select="boolean(1)"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise><!-- not(contains($text, $TEXT_LINE_WRAPPER)) -->
- <!-- Finally wrap the line in the <fo:block> tags -->
- <fo:block><xsl:value-of select="normalize-space($text)"/></fo:block>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- Print out table body. Each column from $columns defines the data source
- for the table column.
- - column/@name - values are read from address@hidden
- - column/name - same as above for compatibility with supplemental
reports
- - column/@scalar - values are read from $scalars/*[name(.)=$scalar_name]
- - column/@special - call 'get-special-column-value' to get values - it is
- a hook for any special case, i.e. a column
- which is not present in the input XML, but is
calculated
- on the fly.
- Parameters:
- - columns - nodeset containing table-columns meta information.
- - counter - row counter (incrementing with each table data row)
- - max-counter - upper limit for 'counter' (including)
- - inforceyear - alignment parameter for 'counter'
- - special-param - an untouched value passed through
- directly to 'get-special-column-value'
- -->
- <xsl:template name="generate-table-values">
- <xsl:param name="columns"/>
- <xsl:param name="counter"/>
- <xsl:param name="max-counter"/>
- <xsl:param name="inforceyear"/>
- <xsl:param name="special-param" select="NaN"/>
- <xsl:param name="add-dummy-row-if-empty" select="boolean(1)"/>
- <xsl:if test="$counter <= $max-counter">
- <fo:table-row>
- <xsl:for-each select="$columns">
- <fo:table-cell padding="1pt .5pt 0">
- <!-- Add some space after each 5th year -->
- <xsl:if test="($counter + $inforceyear) mod 5 = 0">
- <!-- but only if it's not the last row of the table -->
- <xsl:if test="$counter < $max-counter">
- <xsl:attribute name="padding-bottom">8pt</xsl:attribute>
- </xsl:if>
- </xsl:if>
- <fo:block text-align="right">
- <xsl:choose>
- <xsl:when test="./name">
- <xsl:variable name="column_name" select="string(./name)"/>
- <xsl:value-of
select="address@hidden/duration[$counter]/@column_value"/>
- </xsl:when>
- <xsl:when test="@name">
- <xsl:variable name="column_name" select="@name"/>
- <xsl:value-of
select="address@hidden/duration[$counter]/@column_value"/>
- </xsl:when>
- <xsl:when test="@scalar">
- <xsl:variable name="scalar_name" select="@scalar"/>
- <xsl:value-of select="$scalars/*[name(.)=$scalar_name]"/>
- </xsl:when>
- <xsl:when test="@special">
- <xsl:call-template name="get-special-column-value">
- <xsl:with-param name="special" select="@special"/>
- <xsl:with-param name="column" select="."/>
- <xsl:with-param name="counter" select="$counter"/>
- <xsl:with-param name="special-param"
select="$special-param"/>
- </xsl:call-template>
- </xsl:when>
- </xsl:choose>
- </fo:block>
- </fo:table-cell>
- </xsl:for-each>
- <!--
- Ensure that a group of 5 rows is never split across multiple pages.
- Add a dummy cell, that spans 5 rows. Since FOP avoids breaking cells,
- this cell remains on one page, so will the group of 5 rows.
- -->
- <xsl:if test="($counter + $inforceyear) mod 5 = 1">
- <fo:table-cell number-rows-spanned="5">
- <fo:block/>
- </fo:table-cell>
- </xsl:if>
- </fo:table-row>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$counter + 1"/>
- <xsl:with-param name="max-counter" select="$max-counter"/>
- <xsl:with-param name="inforceyear" select="$inforceyear"/>
- <xsl:with-param name="special-param" select="$special-param"/>
- </xsl:call-template>
- </xsl:if>
- <!--
- If there is no data at all, then FOP would complain because
- the specification does not allow empty <fo:table-body/> tag.
- As a workaround add an empty row.
- -->
- <xsl:if test="not($max-counter) and $add-dummy-row-if-empty">
- <fo:table-row>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </xsl:if>
- </xsl:template>
-
- <xsl:variable name="TEXT_ELLIPSIS" select="'...'"/>
- <!--
- Truncate string $passString if its length is more than $length.
- -->
- <xsl:template name="limitstring">
- <xsl:param name="passString"/>
- <xsl:param name="length"/>
- <xsl:choose>
- <xsl:when test="string-length($passString) <= $length">
- <xsl:value-of select="$passString"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="substring($passString, 1, $length)"/>
- <xsl:value-of select="$TEXT_ELLIPSIS"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- Use a smaller logo after the first page, but no smaller than this.
- -->
- <xsl:template name="company-logo">
- <xsl:if test="not($hide-company-logo)">
- <fo:external-graphic width="1.5in" src="company_logo.jpg"/>
- </xsl:if>
- </xsl:template>
-
- <!-- Generic cover page -->
- <xsl:template name="generic-cover">
- <fo:page-sequence master-reference="cover" force-page-count="no-force">
- <fo:flow flow-name="xsl-region-body">
- <fo:block border="2pt solid #002F6C" font-size="14pt"
font-family="sans-serif" text-align="center">
-
- <fo:block font-size="20pt" font-weight="bold" padding-top="5em">
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- </fo:block>
- <fo:block font-size="20pt" font-weight="bold">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- Life Insurance Illustration
- </xsl:when>
- <xsl:otherwise>
- In Force Life Insurance Illustration
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="8em">
- Prepared for:
- </fo:block>
- <fo:block padding-top="1em" margin="0 .15in">
- <xsl:variable name="prepared-for-raw">
- <xsl:choose>
- <xsl:when test="not($is_composite)">
- <xsl:value-of select="$scalars/Insured1"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/CorpName"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="prepared-for"
select="normalize-space($prepared-for-raw)"/>
- <!-- Properly adjust for long user input strings: limit output to
140 characters for approximately two lines. -->
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString" select="$prepared-for"/>
- <xsl:with-param name="length" select="140"/>
- </xsl:call-template>
- <xsl:if test="string-length($prepared-for) < 70">
- <fo:block padding=".5em"/>
- </xsl:if>
- <xsl:if test="string-length($prepared-for) = 0">
- <fo:block padding=".5em"/>
- </xsl:if>
- </fo:block>
-
- <fo:block text-align="center">
- <fo:block font-weight="bold" padding="4em 0 1em">
- Presented by:
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/ProducerName"/>
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/ProducerStreet"/>
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/ProducerCity"/>
- </fo:block>
- <fo:block padding-top="2em">
- <xsl:call-template name="date-prepared"/>
- </fo:block>
- </fo:block>
-
- <!--
- Use a larger logo for the cover page.
- -->
- <fo:block padding="0.8in">
- <fo:external-graphic width="2.5in" src="company_logo.jpg"/>
- </fo:block>
-
- <fo:block font-size="9pt" padding-bottom="1em">
- <xsl:value-of select="$scalars/MarketingNameFootnote"/>
- </fo:block>
-
- <fo:block padding-bottom="1em" font-size="9pt" text-align="left"
text-indent="4em">
- <xsl:value-of select="$scalars/StateMarketingImprimatur"/>
- </fo:block>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
- </xsl:template>
-
- <!--
- Helper template - specify page footer using less code.
- |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
- | $top-block |
- |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
- | $subtop-block |
- |============================================|
- | $left-block | $center-block | $right-block |
- \~~~~~~~~~~~-~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~/
- -->
- <xsl:template name="generic-footer">
- <xsl:param name="top-block" select="''"/>
- <xsl:param name="subtop-block" select="''"/>
- <xsl:param name="left-block" select="''"/>
- <xsl:param name="center-block" select="''"/>
- <xsl:param name="right-block" select="''"/>
- <fo:static-content flow-name="xsl-region-after">
- <fo:block font-size="8pt" font-family="sans-serif" text-align="left">
- <xsl:if test="$top-block">
- <fo:block padding=".5em 0">
- <xsl:copy-of select="$top-block"/>
- </fo:block>
- </xsl:if>
- <fo:block padding-top=".5em" border-top-style="solid"
border-top-width="1pt" border-top-color="#002F6C">
- <xsl:if test="$subtop-block">
- <fo:block padding=".5em 0">
- <xsl:copy-of select="$subtop-block"/>
- </fo:block>
- </xsl:if>
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell>
- <fo:block text-align="left">
- <xsl:copy-of select="$left-block"/>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block text-align="center">
- <xsl:copy-of select="$center-block"/>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block text-align="right">
- <xsl:copy-of select="$right-block"/>
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:block>
- </fo:static-content>
- </xsl:template>
-
-<xsl:template name="print-mastercontractnumber-and-contractnumber">
- <xsl:param name="omit_policynumber" select="$is_composite"/>
- <!--
- This monstrosity truncates 'MasterContractNumber' and 'ContractNumber' to:
- * 30 characters if both are present;
- * 15 characters if only one is present.
- -->
- <xsl:variable name="has_master_contract"
select="number($scalars/MasterContractNumber!='')"/>
- <xsl:variable name="has_polnumber"
select="number($scalars/ContractNumber!='' and not($omit_policynumber))"/>
- <xsl:variable name="contracts" select="$has_master_contract +
$has_polnumber"/>
- <xsl:if test="$contracts">
- <xsl:variable name="number_length" select="floor(30 div $contracts)"/>
- <fo:block>
- <xsl:if test="$has_master_contract">
- Master contract:
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/MasterContractNumber"/>
- <xsl:with-param name="length" select="$number_length"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:if test="$has_polnumber">
- Contract number:
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/ContractNumber"/>
- <xsl:with-param name="length" select="$number_length"/>
- </xsl:call-template>
- </xsl:if>
- </fo:block>
- </xsl:if>
- </xsl:template>
-
- <!-- Print 'Page n of N' text snippet. -->
- <xsl:template name="page-of">
- Page <fo:page-number/> of <fo:page-number-citation ref-id="endofdoc"/>
- </xsl:template>
-
- <!-- Empty stub for special table column values retrieval hook template -->
- <xsl:template name="get-special-column-value"/>
-
- <!--
- Custom table headers for 'illustration-assumption-report'.
- The special feature requested: the cell 'Net Crediting Rate'
- to be nicely centered over two cells.
- -->
- <xsl:template name="illustration-assumption-custom-headers">
- <fo:table-row>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Policy</fo:block>
- <fo:block>Year</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>End of</fo:block>
- <fo:block>Year Age</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Sep Acct Net</fo:block>
- <fo:block>Int Rate</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Gen Acct</fo:block>
- <fo:block>Current Rate</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>M&E</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Indiv</fo:block>
- <fo:block>Pmt Mode</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Corp</fo:block>
- <fo:block>Pmt Mode</fo:block>
- </fo:table-cell>
- <fo:table-cell number-rows-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block>Assumed</fo:block>
- <fo:block>Loan Interest</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell padding="2pt">
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/illustration_reg.xsl b/illustration_reg.xsl
deleted file mode 100644
index c80dd14..0000000
--- a/illustration_reg.xsl
+++ /dev/null
@@ -1,1805 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Life insurance illustrations.
-
- Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
- http://savannah.nongnu.org/projects/lmi
- email: <address@hidden>
- snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp " ">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
- <xsl:import href="fo_common.xsl"/>
- <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
- <xsl:variable name="ModifiedSinglePremium">
- <xsl:call-template name="set_modified_single_premium"/>
- </xsl:variable>
- <xsl:variable name="ModifiedSinglePremium0">
- <xsl:call-template name="set_modified_single_premium0"/>
- </xsl:variable>
- <xsl:variable name="SinglePremium">
- <xsl:call-template name="set_single_premium"/>
- </xsl:variable>
- <xsl:variable name="GroupExperienceRating">
- <xsl:call-template name="set_group_experience_rating"/>
- </xsl:variable>
- <xsl:variable name="GroupCarveout">
- <xsl:call-template name="set_group_carveout"/>
- </xsl:variable>
- <xsl:variable name="FlexiblePremium">
- <xsl:call-template name="set_flexible_premium"/>
- </xsl:variable>
-
- <xsl:template match="/">
- <fo:root>
- <fo:layout-master-set>
-
- <!-- Define the cover page. -->
- <fo:simple-page-master master-name="cover">
- <xsl:call-template name="set-page-size"/>
- <fo:region-body margin=".1in .1in 0"/>
- </fo:simple-page-master>
-
- <!-- Define the narrative summary page. -->
- <fo:simple-page-master master-name="narrative-summary">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin=".5in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".5in"/>
- </fo:simple-page-master>
-
- <!-- Define the column headings and key terms page. -->
- <fo:simple-page-master master-name="column-headings-and-key-terms">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin=".15in 0 .45in"/>
- <!-- Header -->
- <fo:region-before extent="2in"/>
- <!-- Footer -->
- <fo:region-after extent="0.45in"/>
- </fo:simple-page-master>
-
- <!-- Define the Numeric Summary page. -->
- <fo:simple-page-master master-name="numeric-summary">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3.1in 0 .52in"/>
- <!-- Header -->
- <fo:region-before extent="3.1in"/>
- <!-- Footer -->
- <fo:region-after extent="0.52in"/>
- </fo:simple-page-master>
-
- <!-- Define the Tabular Detail page. -->
- <fo:simple-page-master master-name="tabular-detail">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3.1in 0 1.3in"/>
- <!-- Header -->
- <fo:region-before extent="3.1in"/>
- <!-- Footer -->
- <fo:region-after extent="1.27in"/>
- </fo:simple-page-master>
-
- <!-- Define the Tabular Detail (Report 2) page. -->
- <fo:simple-page-master master-name="tabular-detail-report2">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3.2in 0 1.35in"/>
- <!-- Header -->
- <fo:region-before extent="3.1in"/>
- <!-- Footer -->
- <fo:region-after extent="1.27in"/>
- </fo:simple-page-master>
-
- <!-- Define the Supplemental Report page. -->
- <xsl:if test="$has_supplemental_report">
- <fo:simple-page-master master-name="supplemental-report">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3in 0 1.25in"/>
- <!-- Header -->
- <fo:region-before extent="3.0in"/>
- <!-- Footer -->
- <fo:region-after extent="1.27in"/>
- </fo:simple-page-master>
- </xsl:if>
-
- <!-- Define the Numeric Summary Attachment page. -->
- <fo:simple-page-master master-name="numeric-summary-attachment">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3.1in 0 .52in"/>
- <!-- Header -->
- <fo:region-before extent="3.1in"/>
- <!-- Footer -->
- <fo:region-after extent="0.52in"/>
- </fo:simple-page-master>
-
- </fo:layout-master-set>
-
- <!-- The data to be displayed in the pages, cover page first. -->
- <xsl:call-template name="generic-cover"/>
-
- <!-- NARRATIVE SUMMARY - begins here -->
- <fo:page-sequence master-reference="narrative-summary"
initial-page-number="1">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Narrative Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10pt" padding-top="1em">
- NARRATIVE SUMMARY
- </fo:block>
- <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
- <fo:block padding-top="1em">
- <!-- Single Premium Logic -->
- <xsl:choose>
- <xsl:when test="$SinglePremium!='1'">
- <xsl:value-of select="$scalars/PolicyMktgName"/> is a
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating='1'">
- group
- </xsl:if>
- <xsl:if test="$GroupCarveout='1'">
- group
- </xsl:if>
- flexible premium adjustable life insurance contract.
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating='1'">
- It is a no-load policy and is intended for large case
sales.
- It is primarily marketed to financial institutions
- to fund certain corporate liabilities.
- </xsl:if>
- It features accumulating account values, adjustable benefits,
- and flexible premiums.
- </xsl:when>
- <xsl:when test="$ModifiedSinglePremium='1' or
$ModifiedSinglePremium0='1'">
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- is a modified single premium adjustable life
- insurance contract. It features accumulating
- account values, adjustable benefits, and single premium.
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- is a single premium adjustable life insurance contract.
- It features accumulating account values,
- adjustable benefits, and single premium.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block padding-top="1em">
- Coverage may be available on a Guaranteed Standard Issue basis.
- All proposals are based on case characteristics and must
- be approved by the <xsl:value-of
select="$scalars/InsCoShortName"/>
- Home Office. For details regarding underwriting
- and coverage limitations refer to your offer letter
- or contact your <xsl:value-of
select="$scalars/InsCoShortName"/>
- representative.
- </fo:block>
- </xsl:if>
- <!-- Group Experience Rating Logic -->
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/AvName"/>
- <xsl:value-of select="$scalars/MonthlyChargesPaymentFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:choose>
- <!-- Single Premium Logic -->
- <xsl:when test="$SinglePremium!='1'">
- Premiums are assumed to be paid on
- a<xsl:if
test="address@hidden'ErMode']/duration[1]/@column_value='Annual'">n </xsl:if>
- <xsl:value-of
select="translate(address@hidden'ErMode']/duration[1]/@column_value,$ucletters,$lcletters)"/>
- basis and received at the beginning of the contract year.
- </xsl:when>
- <xsl:otherwise>
- The single premium is assumed to be paid at the beginning
- of the contract year.
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="$scalars/AvName"/> Values,
- <xsl:value-of select="$scalars/CsvName"/> Values,
- and death benefits are illustrated as of the end
- of the contract year. The method we use to allocate
- overhead expenses is the fully allocated expense method.
- </fo:block>
- <!-- Single Premium Logic -->
- <xsl:if test="$SinglePremium!='1'">
- <fo:block padding-top="1em">
- In order to guarantee coverage to age
- <xsl:value-of select="$scalars/EndtAge"/>,
- a<xsl:if
test="address@hidden'ErMode']/duration[1]/@column_value='Annual'">n </xsl:if>
- <xsl:value-of
select="translate(address@hidden'ErMode']/duration[1]/@column_value,$ucletters,$lcletters)"/>
- premium
- <xsl:choose>
- <xsl:when test="$scalars/GuarPrem!='0'">
- of $<xsl:value-of select="$scalars/GuarPrem"/>
- must be paid.
- </xsl:when>
- <xsl:otherwise>
- is defined.
- </xsl:otherwise>
- </xsl:choose>
- This amount is based on the guaranteed monthly charges
- and the guaranteed interest crediting rate.
- <xsl:if test="$scalars/DefnLifeIns='GPT'">
- This premium may be in excess of the maximum premium
allowable
- in order to qualify this policy as life insurance.
- </xsl:if>
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- Loaned amounts of the <xsl:value-of select="$scalars/AvName"/>
- Value will be credited a rate equal to the loan interest rate
less
- a spread, guaranteed not to exceed
- <xsl:choose>
- <xsl:when test="$GroupCarveout='1'">
-<!-- This is what it should really be, but it needs to be made available
-to the xsl files first.
- <xsl:value-of select="$scalars/GuarRegLoanSpread"/>.
--->
- 1.25%
- </xsl:when>
- <xsl:otherwise>
- 3.00%.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$scalars/HasTerm='1'">
- <fo:block padding-top="1em">
- The term rider provides the option to purchase monthly
- term insurance on the life of the insured. The term rider
- selected face amount supplements the selected face amount
- of the contract. If the term rider is attached, the policy
- to which it is attached may have a lower annual cutoff premium
- and, as a result, the lower overall sales loads paid may be
- lower than a contract having the same total face amount,
- but with no term rider.
- <xsl:if test="$scalars/NoLapse='1'">
- Also, the lapse protection feature of the contract's
- <xsl:value-of select="$scalars/NoLapseProvisionName"/>
- does not apply to the term rider's selected face amount.
- </xsl:if>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasWP='1'">
- <fo:block padding-top="1em">
- The Waiver of Monthly Charges Rider provides for waiver
- of monthly charges in the event of the disability
- of the insured that begins before attained age 65
- and continues for at least 6 months, as described in the rider.
- An additional charge is associated with this rider. Please
refer
- to your contract for specific provisions and a detailed
schedule
- of charges.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasADD='1'">
- <fo:block padding-top="1em">
- The Accidental Death benefit provides an additional benefit
- if death is due to accident. An additional charge is associated
- with this rider. Please refer to your contract
- for specific provisions and a detailed schedule of charges.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- The definition of life insurance for this contract is the
- <xsl:choose>
- <xsl:when test="$scalars/DefnLifeIns='GPT'">
- guideline premium test. The guideline single premium
- is $<xsl:value-of select="$scalars/InitGSP"/>
- and the guideline level premium
- is $<xsl:value-of select="$scalars/InitGLP"/>
- </xsl:when>
- <xsl:otherwise>
- cash value accumulation test.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block padding-top="1em">
- This is an illustration only. An illustration is not intended
- to predict actual performance. Interest rates
- <xsl:if test="$scalars/Participating='1'">, dividends,</xsl:if>
- and values set forth in the illustration are not guaranteed.
- </fo:block>
- <fo:block padding-top="1em">
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce='1'">
- <xsl:if test="$SinglePremium='1'">
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote0"/>
- </xsl:if>
- <xsl:if test="$FlexiblePremium='1'">
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote0"/>
- </xsl:if>
- <xsl:if test="$SinglePremium!='1'">
- <xsl:if test="$FlexiblePremium!='1'">
- <fo:block>
- <xsl:choose>
- <xsl:when test="$scalars/StatePostalAbbrev!='TX'">
- This illustration assumes that the currently
illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur
- and actual results may be more or less favorable
than shown.
- The non-guaranteed benefits and values are not
guaranteed
- and are based on assumptions such as interest
credited
- and current monthly charges, which are subject to
change by
- <xsl:value-of select="$scalars/InsCoName"/>.
- </xsl:when>
- <xsl:otherwise>
- This illustration is based on both non-guaranteed
- and guaranteed assumptions. Non-guaranteed
assumptions
- include interest rates and monthly charges.
- This illustration assumes that the currently
illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur
- and actual results may be more or less favorable
than shown.
- Factors that may affect future policy performance
include
- the company's expectations for future mortality,
investments,
- persistency, profits and expenses.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:if>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
--->
- <fo:block>
- <xsl:choose>
- <xsl:when test="$scalars/StatePostalAbbrev!='TX'">
- This illustration assumes that the currently
illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur
- and actual results may be more or less favorable than
shown.
- The non-guaranteed benefits and values are not
guaranteed
- and are based on assumptions such as interest credited
- and current monthly charges, which are subject to
change by
- <xsl:value-of select="$scalars/InsCoName"/>.
- </xsl:when>
- <xsl:otherwise>
- This illustration is based on both non-guaranteed
- and guaranteed assumptions. Non-guaranteed assumptions
- include interest rates and monthly charges.
- This illustration assumes that the currently
illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur
- and actual results may be more or less favorable than
shown.
- Factors that may affect future policy performance
include
- the company's expectations for future mortality,
investments,
- persistency, profits and expenses.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
- </xsl:otherwise>
- </xsl:choose>
--->
- </fo:block>
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
- <xsl:if test="$scalars/IsInforce='1'">
- <fo:block font-weight="bold" font-style="italic"
text-align="center" padding-top="10em">
- <xsl:value-of select="$scalars/InforceNonGuaranteedFootnote1"/>
- </fo:block>
- <fo:block font-weight="bold" font-style="italic"
padding-top="1em">
- <xsl:value-of select="$scalars/InforceNonGuaranteedFootnote2"/>
- </fo:block>
- </xsl:if>
--->
- </fo:block>
-
- <!-- Force Second Page -->
- <fo:block break-after="page"/>
- <fo:block text-align="center" font-size="10pt">
- NARRATIVE SUMMARY (Continued)
- </fo:block>
- <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
- <xsl:if test="$scalars/SalesLoadRefund!='0%'">
- <fo:block padding-top="2em">
- Sales Load Refund: We will refund a portion of the sales load
- to you, as part of your <xsl:value-of
select="$scalars/CsvName"/>
- Value, if you surrender your contract within the first two
- policy years. In policy year 1, we will refund
- <xsl:value-of select="$scalars/SalesLoadRefundRate0"/>
- of the first contract year sales load collected
- and in contract year 2, we will refund
- <xsl:value-of select="$scalars/SalesLoadRefundRate1"/>
- of the first contract year sales load collected.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/NoLapse='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/NoLapseProvisionName"/>:
- The contract will remain in force after the first premium
- has been paid, even if there is insufficient
- <xsl:value-of select="$scalars/AvName"/> Value
- to cover the monthly charges provided that the insured
- is not in a substandard rating class and the policy debt
- does not exceed <xsl:value-of select="$scalars/AvName"/> Value.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- This illustration assumes death of the insured
- at age <xsl:value-of select="$scalars/EndtAge"/>.
- </fo:block>
- <fo:block padding-top="1em">
- The loan interest rate is fixed
- at <xsl:value-of select="$scalars/InitAnnLoanDueRate"/> per year.
- </fo:block>
- <fo:block padding-top="1em">
- The state of issue
- is <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
- </fo:block>
- <fo:block padding-top="1em">
- This illustration assumes an initial Selected Face Amount of
- $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>. Selected Face
- Amount reductions assumed in this illustration (if any) are shown
- in the Tabular Detail.
- </fo:block>
- <xsl:if test="$scalars/IsInforce='1'">
- <fo:block padding-top="1em">
- This illustration assumes a beginning account value of
- $<xsl:value-of select="$scalars/InforceUnloanedAV"/> as
- of the date of this illustration.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/IsInforce='1'">
- <fo:block padding-top="1em">
- This illustration assumes a beginning cost basis of
- $<xsl:value-of select="$scalars/InforceTaxBasis"/> as
- of the date of this illustration; the actual cost basis
- may be higher or lower. Consult the Home Office for cost
- basis information.
- </fo:block>
- </xsl:if>
- <xsl:if test="$is_composite">
- <fo:block padding-top="1em">
- Please see the attached census, listing the face amounts,
- underwriting classes and issue ages for individual
participants.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/StatePostalAbbrev='NC' or
$scalars/StatePostalAbbrev='SC'">
- <fo:block padding-top="1em">
- In the states of North Carolina and South Carolina,
- Guaranteed Issue Underwriting is referred
- to as "Limited Underwriting" and Simplified
- Issue Underwriting is referred to as "Simplified Underwriting".
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/StatePostalAbbrev='MD'">
- <fo:block padding-top="1em">
- In the state of Maryland, Guaranteed Issue Underwriting
- is referred to as "Nonstandard Limited Underwriting"
- and Simplified Issue Underwriting is referred to as
- "Nonstandard Simplified Underwriting".
- </fo:block>
- </xsl:if>
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating='1'">
- <fo:block padding-top="1em">
- We may assess a Market Value Adjustment upon a surrender
- of the certificate when the surrender proceeds are intended
- to be applied to an insurance policy issued by an insurer
- unaffiliated with
- <xsl:value-of select="$scalars/InsCoShortName"/>
- with an intent to qualify the exchange as a tax free exchange
- under IRC section 1035.
- </fo:block>
- <xsl:if test="$scalars/UseExperienceRating!='1'">
- <fo:block padding-top="1em">
- This illustration does not reflect experience rating.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- The guaranteed values reflect the maximum charges permitted
- by the contract, which may include an Experience Rating
- Risk Charge.
- </fo:block>
- <fo:block padding-top="1em">
- No Experience Rating Risk Charge or a distribution
- of an Experience Rating Reserve Credit is reflected
- in the current, non-guaranteed values. Actual charges
- and credits will be based on the actual experience of the
group.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/Has1035ExchCharge='1'">
- <!-- Single Premium Logic -->
- <xsl:choose>
- <xsl:when test="$SinglePremium!='1'">
- <xsl:if test="$scalars/Has1035ExchCharge='1'">
- <fo:block padding-top="1em">
- Upon surrender of this policy, where the surrender
- proceeds are intended to be applied to an insurance
policy
- or certificate issued in conjunction with an intent
- to qualify the exchange as a tax free exchange
- under Section 1035 of the Internal Revenue Code,
- we may assess an Exchange Charge. The Exchange Charge
- is the greater of the Market Value Adjustment Charge
- and the Percentage of Premium Charge. In the states
- of Florida or Indiana, the Exchange charge
- (referred to as Assignment Charge in Florida)
- will be the Percentage of Premium Charge only.
- The Exchange Charge will potentially reduce
- the surrender proceeds, but will never increase
- the surrender proceeds. Please refer to your policy
- for details.
- </fo:block>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <fo:block padding-top="1em">
- Upon surrender of this policy, where the surrender proceeds
- are intended to be applied to an insurance policy
- or certificate issued in conjunction with an intent
- to qualify the exchange as a tax free exchange
- under Section 1035 of the Internal Revenue Code (1035
- Exchange), we may assess an Exchange Charge. The Exchange
- Charge will potentially reduce the surrender proceeds,
- but will never increase the surrender proceeds.
- Please refer to your policy for details.
- </fo:block>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <xsl:if test="$scalars/HasSpouseRider='1'">
- <fo:block padding-top="1em">
- The $<xsl:value-of select="$scalars/SpouseRiderAmount"/> Spouse
- rider provides term life insurance on the spouse
- (issue age <xsl:value-of select="$scalars/SpouseIssueAge"/>)
- for a limited duration, for an extra charge.
- Please refer to your contract for specific provisions
- and a detailed schedule of charges.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasChildRider='1'">
- <fo:block padding-top="1em">
- The $<xsl:value-of select="$scalars/ChildRiderAmount"/> Child
- rider provides term life insurance on the insured's children
- for a limited duration, for an extra charge. Please refer
- to your contract for specific provisions
- and a detailed schedule of charges.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/SurrenderFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/FundRateFootnote"/>
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/FundRateFootnote0"/>
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/FundRateFootnote1"/>
- </fo:block>
-
- <fo:block font-weight="bold" text-align="center" padding-top="1em">
- IMPORTANT TAX DISCLOSURE
- </fo:block>
- <fo:block padding-top="1em">
- As illustrated, this contract
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- becomes
- </xsl:when>
- <xsl:otherwise>
- would not become
- </xsl:otherwise>
- </xsl:choose>
- a Modified Endowment Contract (MEC)
- under the Internal Revenue Code<!-- prevent trailing space -->
- <xsl:if test="$scalars/IsMec='1'">
- in year <xsl:value-of select="$scalars/MecYear+1"/>
- </xsl:if>.
- To the extent of gain in the contract, loans, distributions
- and withdrawals from a MEC are subject to income tax
- and may also trigger a penalty tax.
- </fo:block>
- <!-- Single Premium Logic -->
- <xsl:if test="$SinglePremium!='1' and $scalars/IsInforce!='1'">
- <fo:block padding-top="1em">
- The initial 7-pay premium limit
- is $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
- </fo:block>
- </xsl:if>
- <fo:block font-weight="bold" padding-top="1em">
- The information contained in this illustration is not written
- or intended as tax or legal advice, and may not be relied upon
- for purposes of avoiding any federal tax penalties.
- Neither <xsl:value-of select="$scalars/InsCoShortName"/> nor any
- of its employees or representatives are authorized to give tax
- or legal advice. For more information pertaining
- to the tax consequences of purchasing or owning this policy,
- consult with your own independent tax or legal counsel.
- </fo:block>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Column Headings and Key Terms - begins here -->
- <fo:page-sequence master-reference="column-headings-and-key-terms">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Column Headings and Key Terms Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block text-align="center" font-size="10pt" padding-top="1em">
- Column Headings and Key Terms Used in This Illustration
- </fo:block>
- <fo:block text-align="left" font-size="9pt" font-family="sans-serif"
padding-top="1em">
- <fo:block>
- <fo:inline font-weight="bold">
- <xsl:value-of select="$scalars/AvName"/> Value:
- </fo:inline>
- The accumulation at interest of the net premiums paid,
- <xsl:if test="$SinglePremium!='1'">
- less any withdrawals,
- </xsl:if>
- less any monthly charges deducted.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- <xsl:value-of select="$scalars/CsvName"/> Value:
- </fo:inline>
- <xsl:value-of select="$scalars/AvName"/> Value less policy debt.
- <xsl:if test="$scalars/Has1035ExchCharge='1'">
- <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
- </xsl:if>
- </fo:block>
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Current Illustrated Crediting Rate:
- </fo:inline>
- <xsl:value-of select="$scalars/CreditingRateFootnote"/>
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Current Values:
- </fo:inline>
- Values assuming current interest crediting rates
- and current monthly charges. These values are not guaranteed
- and are based on the assumption that premium is paid
- as illustrated.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Death Benefit:
- </fo:inline>
- The amount of benefit provided by the Death Benefit Option
- in effect on the date of death, prior to adjustments
- for policy debt and monthly charges payable to the date of death.
- </fo:block>
-<!--
-Presumably the description of death benefit options should be moved into
-'ProductDescription' (as has already been done in other '.xsl' files).
--->
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Death Benefit Option 1:
- </fo:inline>
- Option in which the death benefit is equal to the selected
- face amount of the contract on the date of death of the insured,
- or if greater the <xsl:value-of select="$scalars/AvName"/> Value
- <xsl:if test="$scalars/SalesLoadRefund!='0%'">
- plus the refund of sales loads (if applicable)
- </xsl:if>
- on the insured's date of death multiplied by the minimum face
- amount percentage for the insured's attained age at death
- (minimum face amount). Please refer to the contract
- for a detailed schedule of death benefit factors.
- </fo:block>
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating!='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Death Benefit Option 2:
- </fo:inline>
- Option in which the death benefit is equal to the selected
- face amount of the contract
- plus the <xsl:value-of select="$scalars/AvName"/> Value
- on the date of death of the insured, or if greater,
- the <xsl:value-of select="$scalars/AvName"/> Value
- <xsl:if test="$scalars/SalesLoadRefund!='0%'">
- plus the refund of sales loads (if applicable)
- </xsl:if>
- on the insured's date of death multiplied
- by the death benefit factor for the insured's attained age
- at death (minimum face amount). Please refer to the contract
- for a detailed schedule of death benefit factors.
- </fo:block>
- </xsl:if>
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Experience Rating Risk Charge:
- </fo:inline>
- Applies only to certain experience rated groups.
- This charge is based on the cost of insurance charges
- assessed during the certificate year. It may be assessed
against
- the account value once per certificate anniversary date
- and upon surrender of the group policy.
- </fo:block>
- </xsl:if>
- <!-- Group Experience Rating Logic -->
- <xsl:if test="$GroupExperienceRating!='1'">
- <xsl:if test="$scalars/Has1035ExchCharge='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Exchange Charge:
- </fo:inline>
- <xsl:value-of select="$scalars/ExchangeChargeFootnote1"/>
- </fo:block>
- </xsl:if>
- </xsl:if>
-
- <!-- Single Premium Logic -->
- <xsl:if test="$SinglePremium='0'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Flexible Premiums:
- </fo:inline>
- Premiums that may be increased, reduced, or not paid,
- if the account value is sufficient to cover the monthly charges.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Guaranteed Values:
- </fo:inline>
- Values assuming the guaranteed crediting rate
- and the guaranteed maximum monthly charges. These values
- are based on the assumption that premium is paid as illustrated.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- MEC:
- </fo:inline>
- Modified Endowment Contract - this classification is given
- to a contract in violation of TAMRA
- (Technical and Miscellaneous Revenue Act), which limits
- the amount of premium that can be paid into a life
- insurance contract. To the extent of gain in the contract, loans,
- distributions and withdrawals from a MEC are subject
- to income tax and may also trigger a tax penalty.
- </fo:block>
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Midpoint Values:
- </fo:inline>
- Values assuming interest rates that are the average
- of the illustrated current crediting rates
- and the guaranteed minimum interest rate, and monthly charges
- that are the average of the current monthly charges
- and the guaranteed monthly charges.
- These values are not guaranteed and are based on the assumption
- that premium is paid as illustrated.
- </fo:block>
- </xsl:if>
- <!-- Single Premium Logic -->
- <xsl:if test="$ModifiedSinglePremium='1' or
$ModifiedSinglePremium0='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Modified Single Premium:
- </fo:inline>
- After the single premium is paid, additional payment
- under this policy will only be accepted for repayment
- of policy debt, payment required to keep the policy
- from lapsing, or payment required to reinstate the policy.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Monthly Charges:
- </fo:inline>
- The monthly charges for the following month which include:
- cost of insurance, plus face amount charges (if applicable),
- plus the administrative charge shown
- on the contract schedule page.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Premium Outlay:
- </fo:inline>
- The amount of premium assumed to be paid by the contract owner
- or other premium payor.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Selected Face Amount:
- </fo:inline>
- The Selected Face Amount may be decreased upon written
application
- satisfactory to <xsl:value-of select="$scalars/InsCoName"/>. A
- requested decrease is allowed only once per Policy Year, and the
- resulting Selected Face Amount after decrease must meet the
- minimum defined in your policy.
- </fo:block>
- <!-- Single Premium Logic -->
- <xsl:if test="$SinglePremium='1' and $ModifiedSinglePremium0='0'
and $ModifiedSinglePremium='0'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Single Premium:
- </fo:inline>
- After the single premium is paid, additional payment
- under this policy will only be accepted for repayment
- of policy debt, payment required to keep the policy
- from lapsing, or payment required to reinstate the policy.
- </fo:block>
- </xsl:if>
- <!-- Single Premium Logic -->
- <xsl:if test="$SinglePremium='1'">
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">
- Ultimate Illustrated Crediting Rate:
- </fo:inline>
- <xsl:value-of select="$scalars/UltCreditingRateFootnote"/>
- </fo:block>
- </xsl:if>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <xsl:if test="$scalars/IsInforce!='1'">
- <!-- Numeric Summary (only for new business)-->
- <!-- Body page -->
- <fo:page-sequence master-reference="numeric-summary">
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10.0pt"
space-before="5pt">
- Numeric Summary
- </fo:block>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="numeric-summary-report"/>
- </fo:page-sequence>
- </xsl:if>
-
- <!-- Tabular Detail -->
- <!-- Body page -->
- <fo:page-sequence master-reference="tabular-detail">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10pt" space-before="5.0pt">
- Tabular Detail
- </fo:block>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="disclaimer">
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
- </xsl:when>
- <xsl:otherwise>
- <fo:block>
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote0"/>
- </fo:block>
- <fo:block font-weight="bold">
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote3"/>
- </fo:block>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
-
- <fo:flow flow-name="xsl-region-body">
- <xsl:variable name="tabular-detail-report-columns">
- <column name="PolicyYear"> | Policy
_Year </column>
- <column composite="0" name="AttainedAge"> | End of
_Year Age</column>
- <column name="GrossPmt"> | Premium
_Outlay </column>
- <column name="AcctVal_Guaranteed"> Guaranteed Values| Account
_Value </column>
- <column name="CSVNet_Guaranteed"> Guaranteed Values| Cash
Surr _Value</column>
- <column name="EOYDeathBft_Guaranteed"> Guaranteed Values| Death
_Benefit </column>
- <column/>
- <column name="AcctVal_Current"> Non-Guaranteed Values| Account
_Value </column>
- <column name="CSVNet_Current"> Non-Guaranteed Values| Cash
Surr _Value</column>
- <column name="EOYDeathBft_Current"> Non-Guaranteed Values| Death
_Benefit </column>
- </xsl:variable>
- <xsl:variable name="tabular-detail-report-columns-raw"
select="document('')//xsl:address@hidden'tabular-detail-report-columns']/column"/>
- <xsl:variable name="columns"
select="$tabular-detail-report-columns-raw[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear
+ 1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Tabular Detail (Report 2)-->
- <!-- Body page -->
- <fo:page-sequence master-reference="tabular-detail-report2">
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10pt" space-before="5.0pt">
- Tabular Detail, continued
- </fo:block>
-<!-- These units don't make sense for the ratios that are actually displayed.
- <xsl:call-template name="dollar-units"/>
--->
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="disclaimer">
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
- </xsl:when>
- <xsl:otherwise>
- <fo:block>
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote0"/>
- </fo:block>
- <fo:block font-weight="bold">
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote3"/>
- </fo:block>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
-
- <fo:flow flow-name="xsl-region-body">
- <xsl:variable name="tabular-detail-report2-columns">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="AnnGAIntRate_Current">Illustrated _Crediting
Rate</column>
- <column name="SpecAmt">Selected_Face Amount</column>
- </xsl:variable>
- <xsl:variable name="tabular-detail-report2-columns-raw"
select="document('')//xsl:address@hidden'tabular-detail-report2-columns']/column"/>
- <xsl:variable name="columns"
select="$tabular-detail-report2-columns-raw[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="{8*count($columns)}em">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear
+ 1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- <!-- endofdoc block id implemented as the "otherwise" condition in
- an xsl:choose instead of xsl:if !='1' so that the XML item
- 'Supplemental Report' need not exist in the XML document for
- page numbering to work properly -->
- <xsl:if test="not($has_supplemental_report)">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Supplemental Report -->
- <!-- Body page -->
- <xsl:if test="$has_supplemental_report">
- <fo:page-sequence master-reference="supplemental-report">
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10.0pt"
space-before="3.0pt">
- <xsl:value-of select="illustration/supplementalreport/title"/>
- </fo:block>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="disclaimer">
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
- </xsl:when>
- <xsl:otherwise>
- <fo:block>
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote0"/>
- </fo:block>
- <fo:block font-weight="bold">
- <xsl:value-of
select="$scalars/InforceNonGuaranteedFootnote3"/>
- </fo:block>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
-
- <!-- Supplemental report body -->
- <xsl:call-template name="supplemental-report-body"/>
- </fo:page-sequence>
- </xsl:if>
-
- <xsl:if test="$scalars/IsInforce!='1'">
- <!-- Numeric Summary Attachment - (Only for New Business) -->
- <!-- Body page -->
- <fo:page-sequence master-reference="numeric-summary-attachment">
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- <fo:block text-align="center" font-size="10.0pt">
- Numeric Summary
- </fo:block>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="omit-pagenumber" select="1"/>
- </xsl:call-template>
-
- <xsl:call-template name="numeric-summary-report"/>
- </fo:page-sequence>
- </xsl:if>
- </fo:root>
- </xsl:template>
-
- <xsl:template name="standardheader">
- <fo:block text-align="center" font-size="9.0pt" padding-bottom="1em">
- <fo:block>
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce='1'">
- LIFE INSURANCE IN FORCE BASIC ILLUSTRATION
- </xsl:when>
- <xsl:otherwise>
- LIFE INSURANCE BASIC ILLUSTRATION
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/InsCoName"/>
- </fo:block>
- <xsl:if test="$scalars/ProducerName!='0'">
- <fo:block>
- Presented by: <xsl:value-of select="$scalars/ProducerName"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/ProducerStreet!='0'">
- <fo:block>
- <xsl:value-of select="$scalars/ProducerStreet"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/ProducerCity!='0'">
- <fo:block>
- <xsl:value-of select="$scalars/ProducerCity"/>
- </fo:block>
- </xsl:if>
- </fo:block>
-
- <fo:block padding-before="5pt" font-size="9pt" font-family="sans-serif">
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column column-width="125mm"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell text-align="left">
- <fo:block>
- Prepared for:
- </fo:block>
- <fo:block>
- Group Name:
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/CorpName"/>
- <xsl:with-param name="length" select="50"/>
- </xsl:call-template>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="$is_composite">
- Composite
Illustration
- </xsl:when>
- <xsl:otherwise>
- Insured:
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/Insured1"/>
- <xsl:with-param name="length" select="50"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="not($is_composite)">
- <fo:block>
- Age:
- <xsl:value-of select="$scalars/Age"/>
- </fo:block>
- </xsl:if>
- <fo:block>
- Product: <xsl:value-of select="$scalars/PolicyForm"/>
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- </fo:block>
- <fo:block>
- <!-- Single Premium Logic -->
- <xsl:choose>
- <xsl:when test="$ModifiedSinglePremium='1'">
- Modified Single Premium Adjustable Life Insurance Policy
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/PolicyLegalName"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block>
- <!-- Single Premium Logic -->
- <xsl:choose>
- <xsl:when test="$SinglePremium!='1'">
- Initial Premium:
- </xsl:when>
- <xsl:otherwise>
- Single Premium:
- </xsl:otherwise>
- </xsl:choose>
- $<xsl:value-of select="$scalars/InitPrem"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="not($is_composite)">
- <fo:block>
- Initial Death Benefit Option:
- <xsl:value-of select="$scalars/InitDBOpt"/>
- </fo:block>
- </xsl:if>
- <xsl:call-template
name="print-mastercontractnumber-and-contractnumber"/>
- </fo:table-cell>
- <fo:table-cell text-align="left">
- <fo:block>
- Initial <xsl:if test="$scalars/HasTerm!='0'">Total</xsl:if>
- Selected Face Amount: $<xsl:value-of
select="$scalars/InitTotalSA"/>
- </fo:block>
- <!-- Remove date prepared....now exists in footer
- <fo:block>
- Date Prepared: <xsl:call-template name="date-prepared"/>
- </fo:block> -->
- <xsl:if test="$scalars/HasTerm!='0'">
- <fo:block>
- Initial Base Face Amount:
- $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
- </fo:block>
- <fo:block>
- Initial Term Face Amount:
- $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
- </fo:block>
- </xsl:if>
- <fo:block>
- Guaranteed Crediting Rate:
- <xsl:value-of select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="$scalars/InforceYear!=0">
- Current Illustrated Crediting Rate:
- <xsl:call-template name="ultimate_interest_rate">
- <xsl:with-param name="counter"
select="$scalars/InforceYear + 1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- Current Illustrated Crediting Rate:
- <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$SinglePremium='1' and $scalars/InforceYear <=
4">
- <!-- Single Premium Logic -->
- <fo:block>
- Ultimate Illustrated Crediting Rate:
- <xsl:choose>
- <xsl:when test="$ModifiedSinglePremium0='1'">
- <xsl:value-of
select="address@hidden'AnnGAIntRate_Current']/duration[11]/@column_value"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of
select="address@hidden'AnnGAIntRate_Current']/duration[6]/@column_value"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:if>
- <!-- Update with "FriendlyUWType" - Get From Greg -->
- <!-- "&IF(UWType="Medical","Fully underwritten",
- IF(AND(State="TX",UWType="Guaranteed issue"),"Substandard
*",UWType))) -->
- <xsl:if test="not($is_composite)">
- <fo:block>
- Underwriting Type:
- <xsl:choose>
- <xsl:when test="$scalars/UWType='Medical'">
- Fully underwritten
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/UWType"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block>
- Rate Classification:
- <xsl:value-of select="$scalars/UWClass"/>,
- <xsl:value-of select="$scalars/Smoker"/>,
- <xsl:value-of select="$scalars/Gender"/>
- </fo:block>
- <xsl:if test="$scalars/UWClass='Rated'">
- <fo:block>
- Table Rating:
- <xsl:value-of select="$scalars/SubstandardTable"/>
- </fo:block>
- </xsl:if>
- </xsl:if>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </xsl:template>
-
- <xsl:template name="numeric-summary-values">
- <xsl:param name="columns"/>
- <xsl:param name="counter"/>
- <xsl:param name="age70"/>
- <xsl:param name="prioryears"/>
- <xsl:variable name="PolicyYear_is_not_zero"
select="address@hidden'PolicyYear']/duration[$counter]/@column_value!='0'"/>
- <fo:table-row>
- <xsl:for-each select="$columns">
- <fo:table-cell padding-top=".2pt" padding-bottom=".2pt">
- <xsl:if test="position()=1">
- <xsl:attribute name="padding-right">6pt</xsl:attribute>
- </xsl:if>
- <fo:block text-align="right">
- <xsl:choose>
- <xsl:when test="not(@name)">
- </xsl:when>
- <xsl:when test="(position() = 1) and ($age70 = 1)">
- Age 70
- </xsl:when>
- <xsl:when test="$PolicyYear_is_not_zero">
- <xsl:variable name="name" select="./@name"/>
- <xsl:value-of
select="address@hidden/duration[$counter]/@column_value"/>
- </xsl:when>
- <xsl:when test="position() = 1">
- <xsl:value-of select="$counter"/>
- </xsl:when>
- <xsl:otherwise>
- 0
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </fo:table-cell>
- </xsl:for-each>
- </fo:table-row>
- <!-- Display Only Summary Years -->
- <xsl:if test="$age70!=1">
- <xsl:if test="$prioryears!=1">
- <xsl:choose>
- <xsl:when test="$counter < 30">
- <xsl:choose>
- <xsl:when test="$counter=5">
- <!-- Display lapse years that occur prior to year 10 -->
- <xsl:if test="$scalars/LapseYear_Guaranteed < 9">
- <xsl:if test="$scalars/LapseYear_Guaranteed > 4">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Guaranteed + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Midpoint < 9">
- <xsl:if test="$scalars/LapseYear_Midpoint > 4">
- <xsl:if test="$scalars/LapseYear_Midpoint >
$scalars/LapseYear_Guaranteed">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Midpoint + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Current < 9">
- <xsl:if test="$scalars/LapseYear_Current > 4">
- <xsl:if test="$scalars/LapseYear_Current >
$scalars/LapseYear_Midpoint">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Current + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <!-- Create year 10 values -->
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$counter + 5"/>
- <xsl:with-param name="age70" select="0"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <!-- Display lapse years that occur prior to next display year
-->
- <xsl:if test="$scalars/LapseYear_Guaranteed < $counter + 9">
- <xsl:if test="$scalars/LapseYear_Guaranteed <
$scalars/MaxDuration">
- <xsl:if test="$scalars/LapseYear_Guaranteed > $counter
- 1">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Guaranteed + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Midpoint < $counter + 9">
- <xsl:if test="$scalars/LapseYear_Midpoint <
$scalars/MaxDuration">
- <xsl:if test="$scalars/LapseYear_Midpoint > $counter -
1">
- <xsl:if test="$scalars/LapseYear_Midpoint >
$scalars/LapseYear_Guaranteed">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Midpoint + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Current < $counter + 9">
- <xsl:if test="$scalars/LapseYear_Current <
$scalars/MaxDuration">
- <xsl:if test="$scalars/LapseYear_Current > $counter -
1">
- <xsl:if test="$scalars/LapseYear_Current >
$scalars/LapseYear_Midpoint">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Current + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <!-- Create year 20 and 30 values -->
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$counter + 10"/>
- <xsl:with-param name="age70" select="0"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="$scalars/LapseYear_Guaranteed <
$scalars/MaxDuration">
- <!-- Display lapse years that occur prior to next display year
-->
- <xsl:if test="$scalars/LapseYear_Guaranteed > $counter - 1">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Guaranteed + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Midpoint <
$scalars/MaxDuration">
- <xsl:if test="$scalars/LapseYear_Midpoint > $counter - 1">
- <xsl:if test="$scalars/LapseYear_Midpoint >
$scalars/LapseYear_Guaranteed">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Midpoint + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Current <
$scalars/MaxDuration">
- <xsl:if test="$scalars/LapseYear_Current > $counter - 1">
- <xsl:if test="$scalars/LapseYear_Current >
$scalars/LapseYear_Midpoint">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Current + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="numeric-summary-report">
- <xsl:variable name="numeric-summary-report-columns">
- <column name="PolicyYear"> |
|Policy _Year </column>
- <column name="GrossPmt"> |
|Premium _Outlay </column>
- <column name="AcctVal_Guaranteed"> Guaranteed Values |
|Account _Value </column>
- <column name="CSVNet_Guaranteed"> Guaranteed Values |
|Cash Surr _Value</column>
- <column name="EOYDeathBft_Guaranteed">Guaranteed Values |
|Death _Benefit </column>
- <column/>
- <column name="AcctVal_Midpoint"> Non-Guaranteed Values|Midpoint
Values|Account _Value </column>
- <column name="CSVNet_Midpoint"> Non-Guaranteed Values|Midpoint
Values|Cash Surr _Value</column>
- <column name="EOYDeathBft_Midpoint">Non-Guaranteed Values|Midpoint
Values|Death _Benefit </column>
- <column> Non-Guaranteed Values|</column>
- <column name="AcctVal_Current"> Non-Guaranteed Values| Current
Values|Account _Value </column>
- <column name="CSVNet_Current"> Non-Guaranteed Values| Current
Values|Cash Surr _Value</column>
- <column name="EOYDeathBft_Current"> Non-Guaranteed Values| Current
Values|Death _Benefit </column>
- </xsl:variable>
- <xsl:variable name="columns"
select="document('')//xsl:address@hidden'numeric-summary-report-columns']/column"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <!-- Create Numeric Summary Values -->
- <fo:table-body>
- <!-- Display summary values if policy lapses prior to year 5 -->
- <xsl:if test="$scalars/LapseYear_Guaranteed < 4">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Guaranteed + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Midpoint < 4">
- <xsl:if test="$scalars/LapseYear_Midpoint >
$scalars/LapseYear_Guaranteed">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Midpoint + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Current < 4">
- <xsl:if test="$scalars/LapseYear_Current >
$scalars/LapseYear_Midpoint">
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter"
select="$scalars/LapseYear_Current + 1"/>
- <xsl:with-param name="age70" select="0"/>
- <xsl:with-param name="prioryears" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="5"/>
- <xsl:with-param name="age70" select="0"/>
- </xsl:call-template>
- <xsl:if test="not($is_composite)">
- <xsl:if test="$scalars/Age < 70">
- <fo:table-row>
- <fo:table-cell padding="8pt">
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- <xsl:call-template name="numeric-summary-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="70 - $scalars/Age"/>
- <xsl:with-param name="age70" select="1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </fo:table-body>
- </fo:table>
- </fo:block>
-
- <fo:block text-align="left" font-size="9pt">
- <xsl:choose>
- <xsl:when test="$is_composite">
- <fo:block padding-top="2em">
- The year of policy lapse on a guaranteed, midpoint
- and current basis is not depicted in the above table of values
- for this composite illustration because it is not applicable
- on a case basis.
- </fo:block>
- </xsl:when>
- <xsl:when test="$scalars/LapseYear_Guaranteed <
$scalars/MaxDuration">
- <fo:block padding-top="2em">
- Additional premium will be required
- in year <xsl:value-of select="$scalars/LapseYear_Guaranteed+1"/>
- or contract will lapse based on guaranteed monthly charges
- and interest rate.
- </fo:block>
- <xsl:if test="$scalars/LapseYear_Midpoint <
$scalars/MaxDuration">
- <fo:block>
- Additional premium will be required
- in year <xsl:value-of select="$scalars/LapseYear_Midpoint+1"/>
- or contract will lapse based on midpoint monthly charges
- and interest rate.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/LapseYear_Current <
$scalars/MaxDuration">
- <fo:block>
- Additional premium will be required
- in year <xsl:value-of select="$scalars/LapseYear_Current+1"/>
- or contract will lapse based on current monthly charges
- and interest rate.
- </fo:block>
- </xsl:if>
- </xsl:when>
- </xsl:choose>
- <xsl:if test="$scalars/IsMec='1'">
- <fo:block padding-top="1em">
- IMPORTANT TAX DISCLOSURE: This is a Modified Endowment Contract.
- Please refer to the Narrative Summary for additional information.
- </fo:block>
- </xsl:if>
- <fo:block padding-top="2em" text-align="center">
- Certification Statements
- </fo:block>
- <fo:block padding-top="1em">
- CONTRACT OWNER / APPLICANT
- </fo:block>
- <xsl:if test="$scalars/InterestDisclaimer!=''">
- <fo:block padding-top="1em">
- I understand that at the present time higher current interest rates
- are credited for policies with case premiums in the amount
- of <xsl:value-of select="$scalars/InterestDisclaimer"/>
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/StatePostalAbbrev='IL'">
- I have received a copy of this illustration and understand
- that this illustration assumes that the currently illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur,
- and actual results may be more or less favorable than those
shown.
- </xsl:when>
- <xsl:when test="$scalars/StatePostalAbbrev='TX'">
- A copy of this illustration has been provided
- to the Applicant/Policyowner.
- </xsl:when>
- <xsl:otherwise>
- I have received a copy of this illustration, and I understand
- that any non-guaranteed elements illustrated are subject
- to change and could be either higher or lower. Additionally,
- I have been informed by my agent that these values
- are not guaranteed.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block text-decoration="overline" padding-top="3em">
- CONTRACT OWNER OR APPLICANT SIGNATURE
- <fo:inline
text-decoration="no-overline"> </fo:inline>
- DATE
- </fo:block>
- <fo:block padding-top="2em">
- AGENT / AUTHORIZED REPRESENTATIVE
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/StatePostalAbbrev='IL'">
- I have informed the applicant or policyowner
- that this illustration assumes that the currently illustrated
- non-guaranteed elements will continue unchanged
- for all years shown. This is not likely to occur,
- and actual results may be more or less favorable than those
shown.
- </xsl:when>
- <xsl:when test="$scalars/StatePostalAbbrev='TX'">
- A copy of this illustration has been provided
- to the Applicant/Policyowner.
- </xsl:when>
- <xsl:otherwise>
- I certify that this illustration has been presented
- to the applicant, and that I have explained
- that any non-guaranteed elements illustrated
- are subject to change. I have made no statements
- that are inconsistent with the illustration.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block text-decoration="overline" padding-top="3em">
- AGENT OR AUTHORIZED REPRESENTATIVE
-
- <fo:inline
text-decoration="no-overline"> </fo:inline>DATE
-
- </fo:block>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="removeamps">
- <xsl:param name="title"/>
- <xsl:if test="contains($title, '&')">
- <xsl:call-template name="concatenate">
- <xsl:with-param name="textbefore"
select="substring-before($title,'amp;')"/>
- <xsl:with-param name="textafter"
select="substring-after($title,'amp;')"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="concatenate">
- <xsl:param name="textbefore"/>
- <xsl:param name="textafter"/>
- <xsl:call-template name="removeamps">
- <xsl:with-param name="title" select="concat($textbefore,$textafter)"/>
- </xsl:call-template>
- </xsl:template>
-
- <xsl:template name="standardfooter">
- <xsl:param name="omit-pagenumber" select="boolean(0)"/>
- <xsl:param name="disclaimer" select="string('')"/>
- <xsl:call-template name="generic-footer">
- <xsl:with-param name="top-block" select="$disclaimer"/>
- <xsl:with-param name="left-block">
- <fo:block>
- Date Prepared:
- <xsl:call-template name="date-prepared"/>
- </fo:block>
- <!-- Version Number -->
- <xsl:if test="$scalars/LmiVersion!=''">
- <fo:block>
- System Version:
- <xsl:value-of select="$scalars/LmiVersion"/>
- </fo:block>
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="center-block">
- <xsl:choose>
- <xsl:when test="$omit-pagenumber">
- Attachment
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="page-of"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="right-block">
- <!--
- APACHE !! The '/text()' suffix in the XPath expression is a workaround
- for Apache-FOP 0.20.5 bug that somehow treats <xsl:value-of/> as
- <xsl:copy-of/> if it is encountered inside a <xsl:with-param/> as
- a single child. Therefore we explicitly convert the expression into
- a string.
- -->
- <xsl:value-of select="$scalars/InsCoName/text()"/>
- <xsl:if test="$compliance_tracking_number">
- <fo:block>
- <xsl:value-of select="$compliance_tracking_number"/>
- </fo:block>
- </xsl:if>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:template>
-
- <xsl:template name="ultimate_interest_rate">
- <xsl:param name="counter"/>
- <xsl:value-of
select="address@hidden'AnnGAIntRate_Current']/duration[$counter]/@column_value"/>
- </xsl:template>
-
- <xsl:template name="set_single_premium">
- <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) >
5"/>
- <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 6) =
'Single' or substring($scalars/PolicyLegalName, 1, 8) = 'Modified'"/>
- <xsl:value-of select="number($A and $B)"/>
- </xsl:template>
-
- <xsl:template name="set_modified_single_premium">
- <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) >
5"/>
- <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 6) =
'Single'"/>
- <xsl:variable name="C" select="$scalars/StatePostalAbbrev = 'MA'"/>
- <xsl:value-of select="number($A and $B and $C)"/>
- </xsl:template>
-
- <xsl:template name="set_modified_single_premium0">
- <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) >
5"/>
- <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 8) =
'Modified'"/>
- <xsl:value-of select="number($A and $B)"/>
- </xsl:template>
-
- <xsl:template name="set_group_experience_rating">
- <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible
Premium Adjustable Life Insurance Policy')"/>
- </xsl:template>
-
- <xsl:template name="set_group_carveout">
- <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible
Premium Adjustable Life Insurance Certificate')"/>
- </xsl:template>
-
- <xsl:template name="set_flexible_premium">
- <xsl:value-of select="number($scalars/PolicyLegalName='Flexible Premium
Adjustable Life Insurance')"/>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/ledger.hpp b/ledger.hpp
index 478b728..3039b8a 100644
--- a/ledger.hpp
+++ b/ledger.hpp
@@ -107,16 +107,6 @@ class LMI_SO Ledger
ledger_evaluator make_evaluator() const;
- // PDF !! Expunge the following six function declarations:
-
- void read (xml::element const&);
- void write(xml::element&) const;
- int class_version() const;
- std::string const& xml_root_name() const;
-
- void write (std::ostream& os) const;
- void write_xsl_fo(std::ostream& os) const;
-
private:
LedgerVariant const& GetOneVariantLedger(mcenum_run_basis) const;
void SetRunBases(int length);
diff --git a/ledger_base.cpp b/ledger_base.cpp
index b67c010..969e572 100644
--- a/ledger_base.cpp
+++ b/ledger_base.cpp
@@ -375,13 +375,6 @@ std::string const& LedgerBase::ScaleUnit() const
}
//============================================================================
-// PDF !! expunge
-int LedgerBase::ScalePower() const
-{
- return scale_power_;
-}
-
-//============================================================================
void LedgerBase::UpdateCRC(CRC& crc) const
{
for(auto const& i : AllVectors)
diff --git a/ledger_base.hpp b/ledger_base.hpp
index 499a1e8..866bb26 100644
--- a/ledger_base.hpp
+++ b/ledger_base.hpp
@@ -178,9 +178,7 @@ class LMI_SO LedgerBase
void apply_scale_factor(int decimal_power);
minmax<double> scalable_extrema() const;
- std::string const& ScaleUnit() const;
-// PDF !! expunge ScalePower(); rename ScaleUnit()
- int ScalePower() const;
+ std::string const& ScaleUnit() const; // PDF !! rename to scale_unit()
std::string value_str(std::string const& map_key, int index) const;
std::string value_str(std::string const& map_key) const;
diff --git a/ledger_pdf.cpp b/ledger_pdf.cpp
index 82238aa..7a71768 100644
--- a/ledger_pdf.cpp
+++ b/ledger_pdf.cpp
@@ -24,16 +24,10 @@
#include "ledger_pdf.hpp"
#include "configurable_settings.hpp"
-#include "contains.hpp" // PDF !! expunge
-#include "global_settings.hpp" // PDF !! expunge
#include "ledger.hpp"
-#include "ledger_invariant.hpp" // PDF !! expunge
-#include "ledger_xsl.hpp" // PDF !! expunge
#include "path_utility.hpp" // unique_filepath()
#include "pdf_command.hpp"
-#include <iostream> // cerr // PDF !! expunge
-
/// Write a scaled copy of the ledger to a PDF file.
///
/// PDF !! Does the following block comment actually apply here? and
@@ -49,39 +43,6 @@
std::string write_ledger_as_pdf(Ledger const& ledger, fs::path const& filepath)
{
- global_settings const& g = global_settings::instance();
- bool const ash_nazg = g.ash_nazg();
- bool const pyx_only_new = contains(g.pyx(), "only_new_pdf");
- bool const pyx_only_old = contains(g.pyx(), "only_old_pdf");
- bool const do_the_old = ash_nazg ? !pyx_only_new : true;
- bool const skip_the_new = ash_nazg ? pyx_only_old : true;
- // Without secret password, preserve old behavior exactly:
- if(!ash_nazg) return write_ledger_as_pdf_via_xsl(ledger, filepath);
- // PDF !! Expunge this conditional block and everything above it:
- if(do_the_old)
- {
- std::string z;
- try
- {
- // Execute both the new and the old code so that their results
- // may be compared.
- z = write_ledger_as_pdf_via_xsl(ledger, filepath);
- }
- // The developer-only password having been specified, show
- // diagnostics only on the console, and don't let them escape
- // (so that any error in the old code doesn't prevent the new
- // code from running).
- catch(std::exception const& e)
- {
- std::cerr << e.what() << std::endl;
- }
- catch(...)
- {
- throw;
- }
- if(skip_the_new) return z;
- }
-
throw_if_interdicted(ledger);
fs::path print_dir(configurable_settings::instance().print_directory());
@@ -90,8 +51,6 @@ std::string write_ledger_as_pdf(Ledger const& ledger,
fs::path const& filepath)
fs::path pdf_out_file = unique_filepath(print_dir / filepath, ".pdf");
Ledger scaled_ledger(ledger);
- // PDF !! Expunge this 'if' line (but not the statement it controls):
- if(0 == scaled_ledger.GetLedgerInvariant().ScalePower())
scaled_ledger.AutoScale();
pdf_command(scaled_ledger, pdf_out_file);
diff --git a/ledger_xml_io.cpp b/ledger_xml_io.cpp
deleted file mode 100644
index 10e58f1..0000000
--- a/ledger_xml_io.cpp
+++ /dev/null
@@ -1,955 +0,0 @@
-// Ledger xml input and output.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#include "pchfile.hpp"
-
-#include "ledger.hpp"
-
-#include "alert.hpp"
-#include "authenticity.hpp"
-#include "calendar_date.hpp"
-#include "configurable_settings.hpp"
-#include "contains.hpp"
-#include "global_settings.hpp"
-#include "handle_exceptions.hpp"
-#include "ledger_invariant.hpp"
-#include "ledger_text_formats.hpp" // ledger_format()
-#include "ledger_variant.hpp"
-#include "ledger_xsl.hpp" // xsl_filepath()
-#include "mc_enum_aux.hpp" // mc_e_vector_to_string_vector()
-#include "miscellany.hpp" // each_equal(), ios_out_trunc_binary()
-#include "oecumenic_enumerations.hpp"
-#include "path_utility.hpp" // fs::path inserter
-#include "ssize_lmi.hpp"
-#include "value_cast.hpp"
-#include "version.hpp"
-#include "xml_lmi.hpp"
-
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
-#include <xsltwrapp/xsltwrapp.h>
-
-#include <algorithm> // transform()
-#include <functional> // minus
-#include <map>
-#include <ostream>
-#include <utility> // pair
-
-namespace
-{
-int const n = 7;
-
-char const* char_p_suffixes[n] =
- {"_Current" // mce_run_gen_curr_sep_full
- ,"_Guaranteed" // mce_run_gen_guar_sep_full
- ,"_Midpoint" // mce_run_gen_mdpt_sep_full
- ,"_CurrentZero" // mce_run_gen_curr_sep_zero
- ,"_GuaranteedZero" // mce_run_gen_guar_sep_zero
- ,"_CurrentHalf" // mce_run_gen_curr_sep_half
- ,"_GuaranteedHalf" // mce_run_gen_guar_sep_half
- };
-
-std::vector<std::string> const suffixes
- (char_p_suffixes
- ,char_p_suffixes + n
- );
-
-typedef std::map<std::string, std::pair<int,oenum_format_style>> format_map_t;
-typedef std::map<std::string, std::string> title_map_t;
-
-// For all numbers (so-called 'scalars' and 'vectors', but not
-// 'strings') grabbed from all ledgers, look for a format. If one
-// is found, use it to turn the number into a string. If not, and
-// the field is named in unavailable(), then it's ignored. Otherwise,
-// format_exists() displays a warning and ignores the field (because
-// throwing an exception would cause only the first warning to be
-// displayed).
-//
-// Rationale: Silently falling back on some default format can't be
-// right, because it masks defects that should be fixed: no default
-// can be universally appropriate.
-//
-// For names formed as
-// basename + '_' + suffix
-// only the basename is used as a map key. Lookups in the format map
-// are strict, as they must be, else one key like "A" would match
-// anything beginning with that letter.
-//
-// Some of the unavailable fields could easily be made available
-// someday; perhaps others should be eliminated from class Ledger.
-
-bool unavailable(std::string const& s)
-{
- static std::vector<std::string> const v
- {"DateOfBirthJdn" // used by group quotes
- ,"EffDateJdn" // used by group quotes
- ,"ListBillDateJdn" // probably not needed
- ,"InforceAsOfDateJdn" // probably not needed
- ,"InitDacTaxRate" // used by PrintRosterTabDelimited(); not
cents
- ,"InitPremTaxRate" // used by PrintRosterTabDelimited(); not
cents
- ,"SubstdTable" // probably not needed
- ,"InitMlyPolFee" // used by PrintRosterTabDelimited()
- ,"InitTgtPremHiLoadRate" // used by PrintRosterTabDelimited(); not
cents
- };
- return contains(v, s);
-}
-
-bool format_exists
- (std::string const& s
- ,std::string const& suffix
- ,format_map_t const& m
- )
-{
- if(contains(m, s))
- {
- return true;
- }
- else if(unavailable(s))
- {
- return false;
- }
- else
- {
- warning() << "No format found for " << s << suffix << LMI_FLUSH;
- return false;
- }
-}
-
-} // Unnamed namespace.
-
-void Ledger::write(xml::element& x) const
-{
- title_map_t title_map;
-
-// Can't seem to get a literal into the output.
-
-// Original: title_map["AttainedAge" ] = "
             
End of   Year Age";
-// No good: title_map["AttainedAge" ] = "
& & & & & & & & & & & & & 
End of & & Year Age";
-// No good: title_map["AttainedAge" ] = "
End of Year Age";
-// No good: title_map["AttainedAge" ] = "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
End of &nbsp;&nbsp;Year Age";
-// No good: title_map["AttainedAge" ] = "<![CDATA[
             
End of   Year Age]]>";
-// No good: title_map["AttainedAge" ] = " ááááááááááááá
End of ááYear Age";
-// No good: title_map["AttainedAge" ] = "
             
End of   Year Age";
-
-// Here are the columns to be listed in the user interface
-// as well as their corresponding titles.
-
- // Current and guaranteed variants are generally given for columns
- // that vary by basis. Some offer only a current variant because
- // they are defined only on a current basis--experience-rating
- // columns, e.g.
-
- title_map["AVGenAcct_CurrentZero" ] = "Curr Charges Account
Value Gen Acct";
- title_map["AVGenAcct_GuaranteedZero" ] = "Guar Charges Account
Value Gen Acct";
- title_map["AVRelOnDeath_Current" ] = "Account Value
____Released on Death";
- title_map["AVSepAcct_CurrentZero" ] = "Curr Charges 0% Account
Value Sep Acct";
- title_map["AVSepAcct_GuaranteedZero" ] = "Guar Charges 0% Account
Value Sep Acct";
- title_map["AcctVal_Current" ] = " _____________ Curr
Account Value";
- title_map["AcctVal_CurrentZero" ] = "Curr Charges 0% Account
Value";
- title_map["AcctVal_Guaranteed" ] = " _____________ Guar
Account Value";
- title_map["AcctVal_GuaranteedZero" ] = "Guar Charges 0% Account
Value";
- title_map["AddonCompOnAssets" ] = "Additional Comp on
Assets";
- title_map["AddonCompOnPremium" ] = "Additional Comp on
Premium";
- title_map["AddonMonthlyFee" ] = "Additional Monthly Fee";
- title_map["AnnGAIntRate_Current" ] = " _____________ Curr Ann
Gen Acct Int Rate";
- title_map["AnnGAIntRate_Guaranteed" ] = " _____________ Guar Ann
Gen Acct Int Rate";
- title_map["AnnHoneymoonValueRate_Current" ] = "Curr Ann Honeymoon Value
Rate";
- title_map["AnnHoneymoonValueRate_Guaranteed"] = "Guar Ann Honeymoon Value
Rate";
- title_map["AnnLoanDueRate" ] = "Loan\nInt Rate";
- title_map["AnnPostHoneymoonRate_Current" ] = "Curr Post Honeymoon Rate";
- title_map["AnnPostHoneymoonRate_Guaranteed" ] = "Guar Post Honeymoon Rate";
- title_map["AnnSAIntRate_Current" ] = " _____________ Curr Ann
Sep Acct Int Rate";
- title_map["AnnSAIntRate_Guaranteed" ] = " _____________ Guar Ann
Sep Acct Int Rate";
- title_map["AttainedAge" ] = " _____________
_____________ End of __Year Age";
- title_map["AvgDeathBft_Current" ] = "Curr Avg Death Benefit";
- title_map["AvgDeathBft_Guaranteed" ] = "Guar Avg Death Benefit";
- title_map["BaseDeathBft_Current" ] = " _____________ Curr Base
Death Benefit";
- title_map["BaseDeathBft_Guaranteed" ] = " _____________ Guar Base
Death Benefit";
- title_map["COICharge_Current" ] = " _____________
_____________ Curr COI Charge";
- title_map["COICharge_Guaranteed" ] = " _____________
_____________ Guar COI Charge";
- title_map["CSVNet_Current" ] = " _____________ Curr Net
Cash Surr Value";
- title_map["CSVNet_CurrentZero" ] = "Curr Charges 0% Net Cash
Surr Value";
- title_map["CSVNet_Guaranteed" ] = " _____________ Guar Net
Cash Surr Value";
- title_map["CSVNet_GuaranteedZero" ] = "Guar Charges 0% Net Cash
Surr Value";
- title_map["CV7702_Current" ] = "Curr 7702 Cash Value";
- title_map["CV7702_Guaranteed" ] = "Guar 7702 Cash Value";
- title_map["ClaimsPaid_Current" ] = " _____________ _______
Curr ___Claims ___Paid";
- title_map["ClaimsPaid_Guaranteed" ] = " _____________ _______
Guar ___Claims ___Paid";
- title_map["CorpTaxBracket" ] = " _____________ Corp Tax
Bracket";
- title_map["CorridorFactor" ] = " _____________
_____________ Corridor Factor";
- title_map["CurrMandE" ] = "Mortality and Expense
Charge";
- title_map["DBOpt" ] = "Death Benefit Option";
- title_map["DacTaxLoad_Current" ] = " _____________ Curr DAC
Tax Load";
- title_map["DacTaxLoad_Guaranteed" ] = " _____________ Guar DAC
Tax Load";
- title_map["DacTaxRsv_Current" ] = "Curr DAC Tax Reserve";
- title_map["DacTaxRsv_Guaranteed" ] = "Guar DAC Tax Reserve";
- title_map["DeathProceedsPaid_Current" ] = " _____________ Curr Death
Proceeds Paid";
- title_map["DeathProceedsPaid_Guaranteed" ] = " _____________ Guar Death
Proceeds Paid";
- title_map["EOYDeathBft_Current" ] = " _____________ Curr EOY
Death Benefit";
- title_map["EOYDeathBft_Guaranteed" ] = " _____________ Guar EOY
Death Benefit";
- title_map["EeGrossPmt" ] = " _____________ ______ EE
Gross Payment";
- title_map["EeModalMinimumPremium" ] = "EE Modal Minimum Premium";
- title_map["EeMode" ] = "EE Payment Mode";
- title_map["ErGrossPmt" ] = " _____________ ______ ER
Gross Payment";
- title_map["ErModalMinimumPremium" ] = "ER Modal Minimum Premium";
- title_map["ErMode" ] = "ER Payment Mode";
- title_map["ExpenseCharges_Current" ] = "Curr Expense Charge";
- title_map["ExpenseCharges_Guaranteed" ] = "Guar Expense Charge";
- title_map["ExperienceReserve_Current" ] = " _____________ Experience
Rating Reserve";
- title_map["GptForceout" ] = "Forceout";
- title_map["GrossIntCredited_Current" ] = "Curr Gross Int Credited";
- title_map["GrossIntCredited_Guaranteed" ] = "Guar Gross Int Credited";
- title_map["GrossPmt" ] = " _____________
_____________ Premium Outlay";
- title_map["HoneymoonValueSpread" ] = "Honeymoon Value Spread";
- title_map["IndvTaxBracket" ] = " _____________ EE Tax
Bracket";
- title_map["InforceLives" ] = " _____________ ______BOY
_______Lives _______Inforce";
- title_map["IrrCsv_Current" ] = " _____________
_____________ Curr IRR on CSV";
- title_map["IrrCsv_Guaranteed" ] = " _____________
_____________ Guar IRR on CSV";
- title_map["IrrDb_Current" ] = " _____________
_____________ Curr IRR on DB";
- title_map["IrrDb_Guaranteed" ] = " _____________
_____________ Guar IRR on DB";
- title_map["KFactor_Current" ] = " _____________ Experience
_______Rating K Factor";
- title_map["LoanIntAccrued_Current" ] = " _____________ ____Curr
Loan Int __Accrued";
- title_map["LoanIntAccrued_Guaranteed" ] = " _____________ ____Guar
Loan Int __Accrued";
- title_map["MlyGAIntRate_Current" ] = "Curr Monthly Gen Acct Int
Rate";
- title_map["MlyGAIntRate_Guaranteed" ] = "Guar Monthly Gen Acct Int
Rate";
- title_map["MlyHoneymoonValueRate_Current" ] = "Curr Monthly Honeymoon
Value Rate";
- title_map["MlyHoneymoonValueRate_Guaranteed"] = "Guar Monthly Honeymoon
Value Rate";
- title_map["MlyPostHoneymoonRate_Current" ] = "Curr Monthly Post
Honeymoon Rate";
- title_map["MlyPostHoneymoonRate_Guaranteed" ] = "Guar Monthly Post
Honeymoon Rate";
- title_map["MlySAIntRate_Current" ] = "Curr Monthly Sep Acct Int
Rate";
- title_map["MlySAIntRate_Guaranteed" ] = "Guar Monthly Sep Acct Int
Rate";
- title_map["ModalMinimumPremium" ] = "Modal Minimum Premium";
- title_map["AnnualFlatExtra" ] = " _____________ Annual
Flat Extra";
-// title_map["NaarForceout" ] = "Forced Withdrawal due
to NAAR Limit";
- title_map["NetCOICharge_Current" ] = "Experience _______Rating
_______Net COI Charge";
- title_map["NetClaims_Current" ] = " _____________
_____________ Curr Net Claims";
- title_map["NetClaims_Guaranteed" ] = " _____________
_____________ Guar Net Claims";
- title_map["NetIntCredited_Current" ] = " _____________ Curr Net
Int Credited";
- title_map["NetIntCredited_Guaranteed" ] = " _____________ Guar Net
Int Credited";
- title_map["NetPmt_Current" ] = " _____________ Curr Net
Payment";
- title_map["NetPmt_Guaranteed" ] = " _____________ Guar Net
Payment";
- title_map["NetWD" ] = " _____________
_____________ _____________ Withdrawal";
- title_map["NewCashLoan" ] = " _____________
_____________ Annual Loan";
- title_map["Outlay" ] = " _____________
_____________ ____Net Outlay";
- title_map["PartMortTableMult" ] = "Partial Mortality
Muliplier";
- title_map["PolicyFee_Current" ] = "Curr ____Policy Fee";
- title_map["PolicyFee_Guaranteed" ] = "Guar ____Policy Fee";
- title_map["PolicyYear" ] = " _____________
_____________ Policy __Year";
- title_map["PrefLoanBalance_Current" ] = "Curr Preferred Loan Bal";
- title_map["PrefLoanBalance_Guaranteed" ] = "Guar Preferred Loan Bal";
- title_map["PremTaxLoad_Current" ] = "Curr Premium Tax Load";
- title_map["PremTaxLoad_Guaranteed" ] = "Guar Premium Tax Load";
- title_map["ProjectedCoiCharge_Current" ] = "Experience Rating
Projected COI Charge";
- title_map["RefundableSalesLoad" ] = " _____________ Refundable
Sales Load";
- title_map["RiderCharges_Current" ] = " _____________
_____________ Curr Rider Charges";
- title_map["Salary" ] = " _____________
_____________ Salary";
- title_map["SepAcctCharges_Current" ] = "Curr Sep Acct Charges";
- title_map["SepAcctCharges_Guaranteed" ] = "Guar Sep Acct Charges";
- title_map["SpecAmt" ] = " _____________
_____________ Specified Amount";
- title_map["SpecAmtLoad_Current" ] = " _____________ Curr Spec
Amt Load";
- title_map["SpecAmtLoad_Guaranteed" ] = " _____________ Guar Spec
Amt Load";
- title_map["SurrChg_Current" ] = " _____________ Curr Surr
Charge";
- title_map["SurrChg_Guaranteed" ] = " _____________ Guar Surr
Charge";
- title_map["TermPurchased_Current" ] = " _____________ Curr Term
Amt Purchased";
- title_map["TermPurchased_Guaranteed" ] = " _____________ Guar Term
Amt Purchased";
- title_map["TermSpecAmt" ] = " _____________ Term
Specified Amount";
- title_map["TgtPrem" ] = " _____________ Target
Premium";
- title_map["TotalIMF" ] = "Total Investment Mgt Fee";
- title_map["TotalLoanBalance_Current" ] = " _____________ Curr Total
Loan Balance";
- title_map["TotalLoanBalance_Guaranteed" ] = " _____________ Guar Total
Loan Balance";
-
- // TODO ?? Titles ought to be read from an external file that
- // permits flexible customization. Compliance might require that
- // 'AcctVal_Current' be called "Cash Value" for one policy form,
- // and "Account Value" for another, in order to match the terms
- // used in the contract exactly. Therefore, these titles probably
- // belong in the product database, which permits variation by
- // product--though it does not accommodate strings as this is
- // written in 2006-07. DATABASE !! So consider adding them there
- // when the database is revamped.
-
-// Here's my top-level analysis of the formatting specification.
-//
-// Formats
-//
-// F0: zero decimals
-// F1: zero decimals, commas
-// F2: two decimals, commas
-// F3: scaled by 100, zero decimals, with '%' at end:
-// F4: scaled by 100, two decimals, with '%' at end:
-//
-// Presumably all use commas as thousands-separators, so that
-// an IRR of 12345.67% would be formatted as "12,345.67%".
-//
-// So the differences are:
-// 'precision' (number of decimal places)
-// percentage (scaled by 100, '%' at end) or not
-// and therefore F0 is equivalent to F1
-
- std::pair<int,oenum_format_style> f1(0, oe_format_normal);
- std::pair<int,oenum_format_style> f2(2, oe_format_normal);
- std::pair<int,oenum_format_style> f3(0, oe_format_percentage);
- std::pair<int,oenum_format_style> f4(2, oe_format_percentage);
-
- format_map_t format_map;
-
-// > Special Formatting for Scalar Items
-// >
-// F4: scaled by 100, two decimals, with '%' at end:
-// > Format as percentage "0.00%"
-// >
- format_map["GuarMaxMandE" ] = f4;
- format_map["InitAnnGenAcctInt" ] = f4;
- format_map["InitAnnLoanCredRate" ] = f4;
- format_map["InitAnnLoanDueRate" ] = f4;
- format_map["InitAnnSepAcctCurrGross0Rate" ] = f4;
- format_map["InitAnnSepAcctCurrGrossHalfRate" ] = f4;
- format_map["InitAnnSepAcctCurrNet0Rate" ] = f4;
- format_map["InitAnnSepAcctCurrNetHalfRate" ] = f4;
- format_map["InitAnnSepAcctGrossInt" ] = f4;
- format_map["InitAnnSepAcctGuarGross0Rate" ] = f4;
- format_map["InitAnnSepAcctGuarGrossHalfRate" ] = f4;
- format_map["InitAnnSepAcctGuarNet0Rate" ] = f4;
- format_map["InitAnnSepAcctGuarNetHalfRate" ] = f4;
- format_map["InitAnnSepAcctNetInt" ] = f4;
- format_map["PostHoneymoonSpread" ] = f4;
- format_map["Preferred" ] = f4;
- format_map["PremTaxRate" ] = f4;
-
-// F3: scaled by 100, zero decimals, with '%' at end:
-// > Format as percentage with no decimal places (##0%)
- format_map["SalesLoadRefund" ] = f3;
- format_map["SalesLoadRefundRate0" ] = f3;
- format_map["SalesLoadRefundRate1" ] = f3;
-
-// >
-// F2: two decimals, commas
-// > Format as a number with thousand separators and two decimal places
(#,###,###.00)
-// >
- format_map["CurrentCoiMultiplier" ] = f2;
- format_map["EeListBillPremium" ] = f2;
- format_map["ErListBillPremium" ] = f2;
- format_map["GuarPrem" ] = f2;
- format_map["InforceTaxBasis" ] = f2;
- format_map["InforceUnloanedAV" ] = f2;
- format_map["InitGLP" ] = f2;
- format_map["InitGSP" ] = f2;
- format_map["InitPrem" ] = f2;
- format_map["InitSevenPayPrem" ] = f2;
- format_map["InitTgtPrem" ] = f2;
- format_map["InitMinPrem" ] = f2;
- format_map["ListBillPremium" ] = f2;
- format_map["ModalMinimumDumpin" ] = f2;
-// >
-// F1: zero decimals, commas
-// > Format as a number with thousand separators and no decimal places
(#,###,###)
-// >
- format_map["Age" ] = f1;
- format_map["AllowDbo3" ] = f1;
- format_map["AvgFund" ] = f1;
- format_map["ChildRiderAmount" ] = f1;
- format_map["CustomFund" ] = f1;
- format_map["Dumpin" ] = f1;
- format_map["EndtAge" ] = f1;
- format_map["External1035Amount" ] = f1;
- format_map["GenAcctAllocation" ] = f1;
- format_map["GenderBlended" ] = f1;
- format_map["GenderDistinct" ] = f1;
- format_map["Has1035ExchCharge" ] = f1;
- format_map["HasADD" ] = f1;
- format_map["HasChildRider" ] = f1;
- format_map["HasHoneymoon" ] = f1;
- format_map["HasSpouseRider" ] = f1;
- format_map["HasSupplSpecAmt" ] = f1;
- format_map["HasTerm" ] = f1;
- format_map["HasWP" ] = f1;
- format_map["InforceIsMec" ] = f1;
- format_map["InforceMonth" ] = f1;
- format_map["InforceYear" ] = f1;
- format_map["InitBaseSpecAmt" ] = f1;
- format_map["InitTermSpecAmt" ] = f1;
- format_map["InitTotalSA" ] = f1;
- format_map["Internal1035Amount" ] = f1;
- format_map["IsInforce" ] = f1;
- format_map["IsMec" ] = f1;
- format_map["LapseMonth" ] = f1;
- format_map["LapseYear" ] = f1;
- format_map["MaxDuration" ] = f1;
- format_map["MecMonth" ] = f1;
- format_map["MecYear" ] = f1;
- format_map["NoLapse" ] = f1;
- format_map["NoLapseAlwaysActive" ] = f1;
- format_map["NoLapseMinAge" ] = f1;
- format_map["NoLapseMinDur" ] = f1;
- format_map["RetAge" ] = f1;
- format_map["SmokerBlended" ] = f1;
- format_map["SmokerDistinct" ] = f1;
- format_map["SplitFundAllocation" ] = f1;
- format_map["SplitMinPrem" ] = f1;
- format_map["SpouseIssueAge" ] = f1;
- format_map["SupplementalReport" ] = f1;
- format_map["UseExperienceRating" ] = f1;
- format_map["GroupIndivSelection" ] = f1;
- format_map["UsePartialMort" ] = f1;
-
-// > Vector Formatting
-// >
-// > Here are the vectors enumerated
-// >
-// F3: scaled by 100, zero decimals, with '%' at end:
-// > Format as percentage with no decimal places (##0%)
-// >
- format_map["CorridorFactor" ] = f3;
- format_map["FundAllocations" ] = f3;
- format_map["MaleProportion" ] = f3;
- format_map["NonsmokerProportion" ] = f3;
- format_map["PartMortTableMult" ] = f3;
-
-// >
-// F4: scaled by 100, two decimals, with '%' at end:
-// > Format as percentage with two decimal places (##0.00%)
-// >
- format_map["AnnGAIntRate" ] = f4;
- format_map["AnnHoneymoonValueRate" ] = f4;
- format_map["AnnLoanDueRate" ] = f4;
- format_map["AnnPostHoneymoonRate" ] = f4;
- format_map["AnnSAIntRate" ] = f4;
- format_map["CorpTaxBracket" ] = f4;
- format_map["CurrMandE" ] = f4;
- format_map["HoneymoonValueSpread" ] = f4;
- format_map["IndvTaxBracket" ] = f4;
- format_map["InforceHMVector" ] = f4;
-
- format_map["IrrCsv_Current" ] = f4;
- format_map["IrrCsv_CurrentZero" ] = f4;
- format_map["IrrCsv_Guaranteed" ] = f4;
- format_map["IrrCsv_GuaranteedZero" ] = f4;
- format_map["IrrDb_Current" ] = f4;
- format_map["IrrDb_CurrentZero" ] = f4;
- format_map["IrrDb_Guaranteed" ] = f4;
- format_map["IrrDb_GuaranteedZero" ] = f4;
-
- format_map["MlyGAIntRate" ] = f4;
- format_map["MlyHoneymoonValueRate" ] = f4;
- format_map["MlyPostHoneymoonRate" ] = f4;
- format_map["MlySAIntRate" ] = f4;
- format_map["TotalIMF" ] = f4;
-// >
-// F0: zero decimals
-// > Format as a number no thousand separator or decimal point (##0%)
-// >
- format_map["AttainedAge" ] = f1;
- format_map["Duration" ] = f1;
- format_map["LapseYears" ] = f1;
- format_map["PolicyYear" ] = f1;
-// >
-// F2: two decimals, commas
-// > Format as a number with thousand separators and two decimal places
(#,###,###.00)
-// >
- format_map["AddonMonthlyFee" ] = f2;
-// TODO ?? The precision of 'InforceLives' and 'KFactor' is inadequate.
-// Is every other format OK?
- format_map["InforceLives" ] = f2;
- format_map["KFactor" ] = f2;
- format_map["AnnualFlatExtra" ] = f2;
-// >
-// F1: zero decimals, commas
-// > Format as a number with thousand separators and no decimal places
(#,###,##0)
-// >
- format_map["AcctVal" ] = f1;
- format_map["AccumulatedPremium" ] = f1;
- format_map["AddonCompOnAssets" ] = f1;
- format_map["AddonCompOnPremium" ] = f1;
- format_map["AvgDeathBft" ] = f1;
- format_map["AVGenAcct" ] = f1;
- format_map["AVRelOnDeath" ] = f1;
- format_map["AVSepAcct" ] = f1;
- format_map["BaseDeathBft" ] = f1;
- format_map["BOYAssets" ] = f1;
- format_map["ClaimsPaid" ] = f1;
- format_map["COICharge" ] = f1;
- format_map["Composite" ] = f1;
- format_map["CSVNet" ] = f1;
- format_map["CV7702" ] = f1;
- format_map["DacTaxLoad" ] = f1;
- format_map["DacTaxRsv" ] = f1;
- format_map["DeathProceedsPaid" ] = f1;
- format_map["EeGrossPmt" ] = f1;
- format_map["EeModalMinimumPremium" ] = f1;
-// format_map["EeMode" ] = f1; // Not numeric.
- format_map["EOYDeathBft" ] = f1;
- format_map["ErGrossPmt" ] = f1;
- format_map["ErModalMinimumPremium" ] = f1;
-// format_map["ErMode" ] = f1; // Not numeric.
- format_map["ExpenseCharges" ] = f1;
- format_map["ExperienceReserve" ] = f1;
- format_map["FundNumbers" ] = f1;
- format_map["GptForceout" ] = f1;
- format_map["GrossIntCredited" ] = f1;
- format_map["GrossPmt" ] = f1;
- format_map["Loads" ] = f1;
- format_map["LoanInt" ] = f1;
- format_map["LoanIntAccrued" ] = f1;
- format_map["ModalMinimumPremium" ] = f1;
- format_map["NaarForceout" ] = f1;
- format_map["NetClaims" ] = f1;
- format_map["NetCOICharge" ] = f1;
- format_map["NetIntCredited" ] = f1;
- format_map["NetPmt" ] = f1;
- format_map["NetWD" ] = f1;
- format_map["NewCashLoan" ] = f1;
- format_map["Outlay" ] = f1;
- format_map["PolicyFee" ] = f1;
- format_map["PrefLoanBalance" ] = f1;
- format_map["PremTaxLoad" ] = f1;
- format_map["ProjectedCoiCharge" ] = f1;
- format_map["RefundableSalesLoad" ] = f1;
- format_map["RiderCharges" ] = f1;
- format_map["Salary" ] = f1;
- format_map["SepAcctCharges" ] = f1;
- format_map["SpecAmt" ] = f1;
- format_map["SpecAmtLoad" ] = f1;
- format_map["SpouseRiderAmount" ] = f1;
- format_map["SurrChg" ] = f1;
- format_map["TermPurchased" ] = f1;
- format_map["TermSpecAmt" ] = f1;
- format_map["TgtPrem" ] = f1;
- format_map["TotalLoanBalance" ] = f1;
-
- // This is a little tricky. We have some stuff that
- // isn't in the maps inside the ledger classes. We're going to
- // stuff it into a copy of the invariant-ledger class's data.
- // To avoid copying, we'll use pointers to the data. Most of
- // this stuff is invariant anyway, so that's a reasonable
- // place to put it.
- //
- // First we make a copy of the invariant ledger:
-
- double_vector_map vectors = ledger_invariant_->AllVectors;
- scalar_map scalars = ledger_invariant_->AllScalars;
- string_map strings = ledger_invariant_->Strings;
-
- // Now we add the stuff that wasn't in the invariant
- // ledger's class's maps (indexable by name). Because we're
- // working with maps of pointers, we need pointers here.
-
- ledger_invariant_->CalculateIrrs(*this);
-
- vectors["IrrCsv_GuaranteedZero" ] = &ledger_invariant_->IrrCsvGuar0 ;
- vectors["IrrDb_GuaranteedZero" ] = &ledger_invariant_->IrrDbGuar0 ;
- vectors["IrrCsv_CurrentZero" ] = &ledger_invariant_->IrrCsvCurr0 ;
- vectors["IrrDb_CurrentZero" ] = &ledger_invariant_->IrrDbCurr0 ;
- vectors["IrrCsv_Guaranteed" ] = &ledger_invariant_->IrrCsvGuarInput;
- vectors["IrrDb_Guaranteed" ] = &ledger_invariant_->IrrDbGuarInput ;
- vectors["IrrCsv_Current" ] = &ledger_invariant_->IrrCsvCurrInput;
- vectors["IrrDb_Current" ] = &ledger_invariant_->IrrDbCurrInput ;
-
- double MaxDuration = ledger_invariant_->EndtAge - ledger_invariant_->Age;
- scalars["MaxDuration"] = &MaxDuration;
- int max_duration = static_cast<int>(MaxDuration);
-
- std::vector<double> PolicyYear;
- std::vector<double> AttainedAge;
-
- PolicyYear .resize(max_duration);
- AttainedAge.resize(max_duration);
-
- int issue_age = static_cast<int>(ledger_invariant_->Age);
- for(int j = 0; j < max_duration; ++j)
- {
- PolicyYear[j] = 1 + j;
- AttainedAge[j] = 1 + j + issue_age;
- }
-
-// TODO ?? An attained-age column is meaningless in a composite. So
-// are several others--notably those affected by partial mortaility.
- vectors["AttainedAge"] = &AttainedAge;
- vectors["PolicyYear" ] = &PolicyYear ;
-
- vectors["InforceLives"] = &ledger_invariant_->InforceLives;
-
- vectors["FundNumbers" ] = &ledger_invariant_->FundNumbers ;
- vectors["FundAllocations"] = &ledger_invariant_->FundAllocations;
-
- // The Ledger object should contain a basic minimal set of columns
- // from which others may be derived. It must be kept small because
- // its size imposes a practical limit on the number of lives that
- // can be run as part of a single census.
- //
- // TODO ?? A really good design would give users the power to
- // define and store their own derived-column definitions. For now,
- // however, code changes are required, and this is as appropriate
- // a place as any to make them.
-
- LedgerInvariant const& Invar = GetLedgerInvariant();
- LedgerVariant const& Curr_ = GetCurrFull();
- LedgerVariant const& Guar_ = GetGuarFull();
-
- // ET !! Easier to write as
- // std::vector<double> NetDeathBenefit =
- // Curr_.EOYDeathBft - Curr_.TotalLoanBalance;
- std::vector<double> NetDeathBenefit(Curr_.EOYDeathBft);
- std::transform
- (NetDeathBenefit.begin()
- ,NetDeathBenefit.end()
- ,Curr_.TotalLoanBalance.begin()
- ,NetDeathBenefit.begin()
- ,std::minus<double>()
- );
- vectors ["NetDeathBenefit"] = &NetDeathBenefit;
- title_map ["NetDeathBenefit"] = " _____________ __Net __Death Benefit";
- format_map["NetDeathBenefit"] = f1;
-
- std::vector<double> SupplDeathBft_Current (Curr_.TermPurchased);
- std::vector<double> SupplDeathBft_Guaranteed(Guar_.TermPurchased);
- vectors ["SupplDeathBft_Current" ] = &SupplDeathBft_Current;
- vectors ["SupplDeathBft_Guaranteed"] = &SupplDeathBft_Guaranteed;
- title_map ["SupplDeathBft_Current" ] = " _____________ Curr Suppl Death
Benefit";
- title_map ["SupplDeathBft_Guaranteed"] = " _____________ Guar Suppl Death
Benefit";
- format_map["SupplDeathBft_Current" ] = f1;
- format_map["SupplDeathBft_Guaranteed"] = f1;
-
- std::vector<double> SupplSpecAmt(Invar.TermSpecAmt);
- vectors ["SupplSpecAmt" ] = &SupplSpecAmt;
- title_map ["SupplSpecAmt" ] = " _____________ Suppl Specified
Amount";
- format_map["SupplSpecAmt" ] = f1;
-
- // [End of derived columns.]
-
- double Composite = is_composite();
- scalars["Composite"] = &Composite;
-
- double NoLapse =
- 0 != ledger_invariant_->NoLapseMinDur
- || 0 != ledger_invariant_->NoLapseMinAge
- ;
- scalars["NoLapse"] = &NoLapse;
-
- std::string LmiVersion(LMI_VERSION);
- calendar_date prep_date;
-
- // Skip authentication for non-interactive regression testing.
- if(!global_settings::instance().regression_testing())
- {
- authenticate_system();
- }
- else
- {
- // For regression tests,
- // - use an invariant string as version
- // - use EffDate as date prepared
- // in order to avoid gratuitous failures.
- LmiVersion = "Regression testing";
-
prep_date.julian_day_number(static_cast<int>(ledger_invariant_->EffDateJdn));
- }
-
- strings["LmiVersion"] = &LmiVersion;
-
- std::string PrepYear = value_cast<std::string>(prep_date.year());
- std::string PrepMonth = month_name(prep_date.month());
- std::string PrepDay = value_cast<std::string>(prep_date.day());
-
- strings["PrepYear" ] = &PrepYear;
- strings["PrepMonth"] = &PrepMonth;
- strings["PrepDay" ] = &PrepDay;
-
- double SalesLoadRefund =
- !each_equal(ledger_invariant_->RefundableSalesLoad, 0.0);
- double SalesLoadRefundRate0 = ledger_invariant_->RefundableSalesLoad[0];
- double SalesLoadRefundRate1 = ledger_invariant_->RefundableSalesLoad[1];
-
- scalars["SalesLoadRefund" ] = &SalesLoadRefund ;
- scalars["SalesLoadRefundRate0"] = &SalesLoadRefundRate0;
- scalars["SalesLoadRefundRate1"] = &SalesLoadRefundRate1;
-
- std::string ScaleUnit = ledger_invariant_->ScaleUnit();
- strings["ScaleUnit"] = &ScaleUnit;
-
- double InitTotalSA =
- ledger_invariant_->InitBaseSpecAmt
- + ledger_invariant_->InitTermSpecAmt
- ;
- scalars["InitTotalSA"] = &InitTotalSA;
-
- // Maps to hold the results of formatting numeric data.
-
- std::map<std::string, std::string> stringscalars;
- std::map<std::string, std::vector<std::string>> stringvectors;
-
- stringvectors["FundNames"] = ledger_invariant_->FundNames;
-
- // Map the data, formatting it as necessary.
-
- // First we'll get the invariant stuff--the copy we made,
- // along with all the stuff we plugged into it above.
- {
- std::string suffix = "";
- for(auto const& j : scalars)
- {
- if(format_exists(j.first, suffix, format_map))
- stringscalars[j.first + suffix] = ledger_format(*j.second,
format_map[j.first]);
- }
- for(auto const& j : strings)
- {
- stringscalars[j.first + suffix] = *j.second;
- }
- for(auto const& j : vectors)
- {
- if(format_exists(j.first, suffix, format_map))
- stringvectors[j.first + suffix] = ledger_format(*j.second,
format_map[j.first]);
- }
- }
-
-// stringscalars["GuarMaxMandE"] = ledger_format(*scalars["GuarMaxMandE"],
2, true);
-// stringvectors["CorridorFactor"] =
ledger_format(*vectors["CorridorFactor"], 0, true);
-// stringscalars["InitAnnGenAcctInt_Current"] =
ledger_format(*scalars["InitAnnGenAcctInt_Current"], 0, true);
-
- // That was the tricky part. Now it's all downhill.
-
- for(auto const& i : ledger_map_->held())
- {
- std::string suffix = suffixes[i.first];
- for(auto const& j : i.second.AllScalars)
- {
-// scalars[j.first + suffix] = j.second;
- if(format_exists(j.first, suffix, format_map))
- stringscalars[j.first + suffix] = ledger_format(*j.second,
format_map[j.first]);
- }
- for(auto const& j : i.second.Strings)
- {
- strings[j.first + suffix] = j.second;
- }
- for(auto const& j : i.second.AllVectors)
- {
-// vectors[j.first + suffix] = j.second;
- if(format_exists(j.first, suffix, format_map))
- stringvectors[j.first + suffix] = ledger_format(*j.second,
format_map[j.first]);
- }
- }
-
- stringvectors["EeMode"] =
mc_e_vector_to_string_vector(ledger_invariant_->EeMode);
- stringvectors["ErMode"] =
mc_e_vector_to_string_vector(ledger_invariant_->ErMode);
- stringvectors["DBOpt"] =
mc_e_vector_to_string_vector(ledger_invariant_->DBOpt );
-
-// TODO ?? Here I copied some stuff from the ledger class files: the
-// parts that speak of odd members that aren't in those class's
-// maps. This may reveal incomplete or incorrect systems analysis.
-
-// Invariant
-//
-// // Special-case vectors (not <double>, or different length than others).
-// EeMode .reserve(Length);
-// ErMode .reserve(Length);
-// DBOpt .reserve(Length);
-//
-// std::vector<int> FundNumbers; [not handled yet]
-// std::vector<std::string> FundNames; [not handled yet]
-// std::vector<int> FundAllocs; [not handled yet]
-//
-// std::vector<double> InforceLives;
-//
-// // Special-case strings.
-// std::string EffDate; [furnished as PrepYear, PrepMonth, PrepDay]
-//
-// Variant
-//
-// [None of these are written to xml, and I think none is wanted.]
-//
-// // special cases
-// int Length;
-// mcenum_gen_basis GenBasis_;
-// mcenum_sep_basis SepBasis_;
-// bool FullyInitialized; // I.e. by Init(BasicValues const*
b)
-
-// Now we're ready to write the xml.
-
- xml::element scalar("scalar");
- xml::element data("data");
- for(auto const& j : stringscalars)
- {
- std::string node_tag = j.first;
- std::string value = j.second;
- scalar.push_back(xml::element(node_tag.c_str(), value.c_str()));
- }
- for(auto const& j : stringvectors)
- {
- xml::element newcolumn("newcolumn");
- xml::element column("column");
- xml_lmi::set_attr(column, "name", j.first.c_str());
- std::vector<std::string> const& v = j.second;
-// TODO ?? InforceLives shows an extra value past the end; should it
-// be truncated here?
- for(int k = 0; k < lmi::ssize(v); ++k)
- {
- xml::element duration("duration");
- xml_lmi::set_attr(duration, "number",
value_cast<std::string>(k).c_str());
- xml_lmi::set_attr(duration, "column_value", v[k].c_str());
- column.push_back(duration);
- }
-// TODO ?? Is <newcolumn> really useful?
- newcolumn.push_back(column);
- data.push_back(newcolumn);
- }
-
- std::vector<std::string> SupplementalReportColumns;
- if(ledger_invariant_->SupplementalReport)
- {
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn00);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn01);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn02);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn03);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn04);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn05);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn06);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn07);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn08);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn09);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn10);
-
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn11);
- }
-
- xml::element supplementalreport("supplementalreport");
- if(ledger_invariant_->SupplementalReport)
- {
- // Eventually customize the report name.
- supplementalreport.push_back(xml::element("title", "Supplemental
Report"));
-
- for(auto const& j : SupplementalReportColumns)
- {
- xml::element columns("columns");
- columns.push_back(xml::element("name", j.c_str()));
- columns.push_back(xml::element("title", title_map[j].c_str()));
- supplementalreport.push_back(columns);
- }
- }
-
-/*
-<supplementalreport>
- <title>Some Report</title>
- <columns>
- <name>TotalLoanBalance_Current</name>
- <title>Curr Total Loan Balance</title>
- </columns>
- <columns>
- <name>etc...</name>
- <title>etc...</title>
- </columns>
-</supplementalreport>
-*/
-
-// SOMEDAY !! It is inefficient to push_back() data into xml elements
-// and then push_back() those populated elements into the root. Avoid
-// needless copying by using insert() to create the intermediate
-// elements and using the iterator it returns to write leaf elements.
- x.push_back(scalar);
- x.push_back(data);
- x.push_back(supplementalreport);
-
- if(is_composite() && contains(global_settings::instance().pyx(),
"values_tsv"))
- {
- throw_if_interdicted(*this);
-
- configurable_settings const& z = configurable_settings::instance();
- fs::path filepath
- ( z.print_directory()
- + "/values"
- + z.spreadsheet_file_extension()
- );
- fs::ofstream ofs(filepath, ios_out_trunc_binary());
-
- for(auto const& j : stringvectors)
- {
- ofs << j.first << '\t';
- }
- ofs << '\n';
-
- for(int i = 0; i < greatest_lapse_dur(); ++i)
- {
- for(auto const& j : stringvectors)
- {
- std::vector<std::string> const& v = j.second;
- if(i < lmi::ssize(v))
- {
- ofs << v[i] << '\t';
- }
- else
- {
- ofs << '\t';
- }
- }
- ofs << '\n';
- }
- if(!ofs)
- {
- alarum() << "Unable to write '" << filepath << "'." << LMI_FLUSH;
- }
- }
-}
-
-int Ledger::class_version() const
-{
- return 0;
-}
-
-std::string const& Ledger::xml_root_name() const
-{
- static std::string const s("illustration");
- return s;
-}
-
-void Ledger::write(std::ostream& os) const
-{
- xml_lmi::xml_document document(xml_root_name());
- xml::element& root = document.root_node();
- write(root);
- os << root;
-}
-
-/// Write a scaled copy of the ledger as xsl-fo.
-///
-/// The original ledger must not be modified because scaling is not
-/// reentrant. However, copying does not prevent that problem here,
-/// because what is scaled is actually not copied due to use of
-/// shared_ptr; see comment on
-/// https://savannah.nongnu.org/bugs/?13599
-/// in the ledger-class implementation.
-
-void Ledger::write_xsl_fo(std::ostream& os) const
-{
- try
- {
- Ledger scaled_ledger(*this);
- scaled_ledger.AutoScale();
-
- xml_lmi::xml_document d(xml_root_name());
- scaled_ledger.write(d.root_node());
-
- xslt::stylesheet z(xsl_filepath(scaled_ledger).string().c_str());
- os << z.apply(d.document());
- }
- catch(...)
- {
- report_exception();
- }
-}
-
diff --git a/ledger_xsl.cpp b/ledger_xsl.cpp
deleted file mode 100644
index 176cf1c..0000000
--- a/ledger_xsl.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-// Ledger xsl operations.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#include "pchfile.hpp"
-
-#include "ledger_xsl.hpp"
-
-#include "alert.hpp"
-#include "configurable_settings.hpp"
-#include "contains.hpp"
-#include "global_settings.hpp"
-#include "ledger.hpp"
-#include "miscellany.hpp"
-#include "path_utility.hpp"
-#include "system_command.hpp"
-
-#include <boost/filesystem/convenience.hpp> // create_directories()
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <ios>
-#include <sstream>
-
-namespace
-{
-std::string xsl_filename(Ledger const& ledger)
-{
- mcenum_ledger_type const z = ledger.ledger_type();
- switch(z)
- {
- case mce_ill_reg: return "illustration_reg.xsl";
- case mce_finra: return "nasd.xsl";
- case mce_group_private_placement: return "reg_d_group.xsl";
- case mce_individual_private_placement: return "reg_d_individual.xsl";
- case mce_prospectus_obsolete: // fall through
- case mce_offshore_private_placement_obsolete: // fall through
- case mce_ill_reg_private_placement_obsolete: // fall through
- case mce_variable_annuity_obsolete:
- {
- alarum() << "Case '" << z << "' not supported." << LMI_FLUSH;
- }
- }
- throw "Unreachable--silences a compiler diagnostic.";
-}
-} // Unnamed namespace.
-
-/// File path for xsl-fo file appropriate for the given ledger.
-
-fs::path xsl_filepath(Ledger const& ledger)
-{
- std::string xsl_name = xsl_filename(ledger);
- fs::path xsl_file(global_settings::instance().data_directory() / xsl_name);
- if(!fs::exists(xsl_file))
- {
- alarum()
- << "Unable to read file '"
- << xsl_file
- << "' required for ledger type '"
- << ledger.ledger_type()
- << "'."
- << LMI_FLUSH
- ;
- }
- return xsl_file;
-}
-
-/// Write ledger as pdf via xsl-fo.
-///
-/// Ensure that the output filename is portable. Apache fop rejects
-/// some names for '-xml' that it accepts for pdf output, without
-/// documenting what names it considers valid, so using the boost
-///
http://www.boost.org/doc/libs/1_37_0/libs/filesystem/doc/portability_guide.htm
-/// conventions here is just a guess. Nonportable names that apache
-/// fop accepts for pdf output seem not to work well with the most
-/// popular msw pdf viewer, at least in a msw 'dde conversation',
-/// so use a similar portable name for pdf output.
-///
-/// USER !! This filename change should be documented for users.
-/// Ultimately, for fop, the reason why their nonportable msw
-/// filenames must be transformed is that apache fop is java, and
-/// java is "portable".
-
-std::string write_ledger_as_pdf_via_xsl(Ledger const& ledger, fs::path const&
filepath)
-{
- throw_if_interdicted(ledger);
-
- fs::path print_dir(configurable_settings::instance().print_directory());
- if(global_settings::instance().ash_nazg())
- {
- // Old implementation: write to a distinctive subdirectory,
- // but only for testing. For production (until the new PDF
- // implementation is accepted), keep the old behavior (i.e.,
- // don't execute this line).
- print_dir = print_dir / "old";
- fs::create_directories(print_dir);
- }
-
- fs::path real_filepath(orthodox_filename(filepath.leaf()));
- LMI_ASSERT(fs::portable_name(real_filepath.string()));
-
- if(contains(global_settings::instance().pyx(), "xml"))
- {
- fs::path xml_file = unique_filepath(print_dir / real_filepath, ".xml");
-
- fs::ofstream ofs(xml_file, ios_out_trunc_binary());
- ledger.write(ofs);
- ofs.close();
- if(!ofs.good())
- {
- alarum()
- << "Unable to write output file '"
- << xml_file
- << "'."
- << LMI_FLUSH
- ;
- }
- }
-
- fs::path xml_fo_file = unique_filepath(print_dir / real_filepath,
".fo.xml");
-
- fs::ofstream ofs(xml_fo_file, ios_out_trunc_binary());
- ledger.write_xsl_fo(ofs);
- ofs.close();
- if(!ofs.good())
- {
- alarum()
- << "Unable to write output file '"
- << xml_fo_file
- << "'."
- << LMI_FLUSH
- ;
- }
-
- fs::path pdf_out_file = unique_filepath(print_dir / real_filepath, ".pdf");
-
- std::ostringstream oss;
- oss
- << configurable_settings::instance().xsl_fo_command()
- << " -fo " << '"' << xml_fo_file << '"'
- << " -pdf " << '"' << pdf_out_file << '"'
- ;
- system_command(oss.str());
- return pdf_out_file.string();
-}
-
diff --git a/ledger_xsl.hpp b/ledger_xsl.hpp
deleted file mode 100644
index 6f99f31..0000000
--- a/ledger_xsl.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Ledger xsl operations.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#ifndef ledger_xsl_hpp
-#define ledger_xsl_hpp
-
-#include "config.hpp"
-
-#include <boost/filesystem/path.hpp>
-
-#include <string>
-
-class Ledger;
-
-std::string write_ledger_as_pdf_via_xsl(Ledger const&, fs::path const&);
-
-fs::path xsl_filepath(Ledger const&);
-
-#endif // ledger_xsl_hpp
-
diff --git a/nasd.xsl b/nasd.xsl
deleted file mode 100644
index 0a22b5a..0000000
--- a/nasd.xsl
+++ /dev/null
@@ -1,1283 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Life insurance illustrations.
-
- Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
- http://savannah.nongnu.org/projects/lmi
- email: <address@hidden>
- snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp " ">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
- <xsl:import href="fo_common.xsl"/>
- <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
- <xsl:variable name="lowerAZ" select="'abcdefghijklmnopqrstuvwxyz'"/>
- <xsl:variable name="upperAZ" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
-
- <xsl:variable name="GroupCarveout">
- <xsl:call-template name="set_group_carveout"/>
- </xsl:variable>
-
- <xsl:variable name="TexasFootnote">
- <xsl:call-template name="set_texas_footnote"/>
- </xsl:variable>
-
- <xsl:template match="/">
- <fo:root>
- <fo:layout-master-set>
-
- <!-- Define the cover page. -->
- <fo:simple-page-master master-name="cover">
- <xsl:call-template name="set-page-size"/>
- <fo:region-body margin=".1in .1in 0"/>
- </fo:simple-page-master>
-
- <!-- Define the Column Definitions page. -->
- <fo:simple-page-master master-name="column-definitions">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.25in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3.0in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
-
- <!-- Define the explanatory notes page. -->
- <fo:simple-page-master master-name="explanatory-notes">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.35in 0 .9in"/>
- <!-- Header -->
- <fo:region-before extent="3.0in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
-
- <!-- Define the explanatory notes page. -->
- <fo:simple-page-master
master-name="explanatory-notes-separate-account">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <!-- column-count="2" -->
- <fo:region-body margin="2.35in 0 1.3in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
-
- <!-- Define the Basic Illustration page. -->
- <fo:simple-page-master master-name="basic-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
-
- <!-- Define the Supplemental Illustration page. -->
- <fo:simple-page-master master-name="supplemental-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.5in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
-
- <!-- Define the Illustration Assumption Detail page. -->
- <xsl:if test="not($is_composite)">
- <fo:simple-page-master master-name="illustration-assumption">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.5in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
- </xsl:if>
-
- <!-- Define the Supplemental Report page. -->
- <xsl:if test="$has_supplemental_report">
- <fo:simple-page-master master-name="supplemental-report">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.8in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1.25in"/>
- </fo:simple-page-master>
- </xsl:if>
- </fo:layout-master-set>
-
- <!-- The data to be displayed in the pages, cover page first. -->
- <xsl:call-template name="generic-cover"/>
-
- <!-- Basic Illustration -->
- <!-- Body page -->
- <fo:page-sequence master-reference="basic-illustration"
initial-page-number="1">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- </xsl:when>
- <xsl:otherwise>
- In Force Illustration
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- </xsl:call-template>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="basic-illustration-report"/>
-
- </fo:page-sequence>
-
- <!-- Supplemental Illustration -->
- <!-- Body page -->
- <fo:page-sequence master-reference="supplemental-illustration">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- </xsl:call-template>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:if test="$scalars/SplitMinPrem='1'">
- <xsl:call-template
name="supplemental-illustration-report-split-premiums"/>
- </xsl:if>
- <xsl:if test="$scalars/SplitMinPrem='0'">
- <xsl:call-template name="supplemental-illustration-report"/>
- </xsl:if>
-
- </fo:page-sequence>
-
- <!-- Column Definition Page - begins here -->
- <fo:page-sequence master-reference="column-definitions">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Column Definitions Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block padding="1em 0 5em" text-align="left" font-size="10pt"
font-family="sans-serif">
- <fo:block font-weight="bold" text-align="center">
- Column Definitions and Key Terms
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Account Value
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/AccountValueFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Cash Surrender Value
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Death Benefit
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/DeathBenefitFootnote"/>
- </fo:block>
-
- <xsl:if test="not($is_composite)">
- <fo:block font-weight="bold" padding-top="1em">
- End of Year Age
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/AttainedAgeFootnote"/>
- </fo:block>
- </xsl:if>
-
- <xsl:if test="$GroupCarveout='1'">
- <fo:block font-weight="bold" padding-top="1em">
- Gross Payment
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/GrossPremiumFootnote"/>
- </fo:block>
- </xsl:if>
-
- <fo:block font-weight="bold" padding-top="1em">
- Gross Rate
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/GrossRateFootnote"/>
- </fo:block>
-
- <xsl:if test="$GroupCarveout='1'">
- <fo:block font-weight="bold" padding-top="1em">
- Minimum Premium
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/InitialPremiumFootnote"/>
- </fo:block>
- </xsl:if>
-
- <fo:block font-weight="bold" padding-top="1em">
- Net Premium
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/NetPremiumFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Net Rate
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/NetRateFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Policy Year
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/PolicyYearFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- Premium Outlay
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/OutlayFootnote"/>
- </fo:block>
-
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- EXPLANATORY NOTES - begins here -->
- <fo:page-sequence master-reference="explanatory-notes">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Explanatory Notes Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block text-align="left" font-size="9.75pt"
font-family="sans-serif">
- <fo:block font-weight="bold" text-align="center">
- IMPORTANT TAX DISCLOSURE
- </fo:block>
-
- <fo:block padding-top="1em">
- As illustrated, this
- <xsl:value-of select="$scalars/ContractName"/>
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- becomes
- </xsl:when>
- <xsl:otherwise>
- would not become
- </xsl:otherwise>
- </xsl:choose>
- a Modified Endowment Contract (MEC) under
- the Internal Revenue Code<!-- prevent trailing space -->
- <xsl:if test="$scalars/IsMec='1'">
- in year <xsl:value-of select="$scalars/MecYear + 1"/>
- </xsl:if>.
- To the extent of gain in the
- <xsl:value-of select="$scalars/ContractName"/>, loans,
- distributions and withdrawals from a MEC are subject to income
- tax and may also trigger a penalty tax.
- </fo:block>
-
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block padding-top="1em">
- The initial 7-pay premium limit is
- $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
- </fo:block>
- </xsl:if>
-
- <fo:block padding-top="1em">
- No tax charge is made to the Separate Account. However,
- such a charge may be made in the future.
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="1em">
- The information contained in this illustration is not written
- or intended as tax or legal advice.
- Neither <xsl:value-of select="$scalars/InsCoShortName"/>
- nor any of its employees or representatives are authorized
- to give tax or legal advice. For more information pertaining
- to the tax consequences of purchasing or owning this
- <xsl:value-of select="$scalars/ContractName"/>,
- consult with your own independent tax or legal counsel.
- </fo:block>
-
- <fo:block font-weight="bold" text-align="center" padding-top="2em">
- EXPLANATORY NOTES
- </fo:block>
-
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/PolicyMktgName"/> is a
- <xsl:value-of select="$scalars/PolicyLegalName"/> issued by
- <xsl:value-of select="$scalars/InsCoName"/>.
- <xsl:value-of select="$scalars/ProductDescription"/>
- </fo:block>
-
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/NoVanishPremiumFootnote"/>
- </fo:block>
-
- <xsl:if test="$scalars/NoLapse='1' and
$scalars/StatePostalAbbrev!='NY'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/NoLapseProvisionName"/>:
- The <xsl:value-of select="$scalars/NoLapseProvisionName"/>
- is a lapse protection feature. If met, this test allows
- your <xsl:value-of select="$scalars/ContractName"/>
- to stay in force for a period of time even if there is
- insufficient <xsl:value-of select="$scalars/AvName"/>
- Value to cover the <xsl:value-of select="$scalars/AvName"/>
- Value charges.
- Refer to your <xsl:value-of select="$scalars/ContractName"/>
- for specific requirements of meeting the
- <xsl:value-of select="$scalars/NoLapseProvisionName"/>.
- </fo:block>
- </xsl:if>
-
- <xsl:if test="$scalars/NoLapseAlwaysActive='1'">
- <fo:block padding-top="1em">
- No-Lapse Guarantee: The
- <xsl:value-of select="$scalars/ContractName"/> will remain in
- force after the first premium has been paid, even if
- there is insufficient <xsl:value-of select="$scalars/AvName"/>
- Value to cover the monthly charges provided that the insured
- is not in a substandard rating class and the
- <xsl:value-of select="$scalars/ContractName"/> debt
- does not exceed <xsl:value-of select="$scalars/AvName"/> Value.
- </fo:block>
- </xsl:if>
-
- <fo:block padding-top="1em">
- The definition of life insurance elected for this
- <xsl:value-of select="$scalars/ContractName"/> is the
- <xsl:choose>
- <xsl:when test="$scalars/DefnLifeIns='GPT'">
- guideline premium test. The guideline single premium is
- $<xsl:value-of select="$scalars/InitGSP"/> and the guideline
- level premium is $<xsl:value-of select="$scalars/InitGLP"/>.
- </xsl:when>
- <xsl:otherwise>
- cash value accumulation test.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
-
- <xsl:if test="$scalars/DefnLifeIns='GPT'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/GptFootnote"/>
- </fo:block>
- </xsl:if>
-
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/InsCoName"/> has the right
- to promptly refund any amount of premium paid if it will
- increase the net amount at risk (referred to in the
- <xsl:value-of select="$scalars/ContractName"/>
- as the Amount of Insurance that Requires a Charge).
- </fo:block>
-
- <fo:block padding-top="1em">
- Premium payments are assumed to be made at the beginning
- of the year. Account values, cash surrender values,
- and death benefits are illustrated as of the end of the year.
- <xsl:value-of select="$scalars/MinimumPremiumFootnote"/>
- </fo:block>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- EXPLANATORY NOTES page 2 - begins here -->
- <fo:page-sequence master-reference="explanatory-notes-separate-account">
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="include-underwriter" select="1"/>
- </xsl:call-template>
-
- <!-- Explanatory Notes Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block text-align="left" font-size="9.75pt"
font-family="sans-serif">
- <fo:block font-weight="bold" text-align="center">
- EXPLANATORY NOTES
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- This illustration assumes death of the insured at
- age <xsl:value-of select="$scalars/EndtAge"/>.
- </fo:block>
- <xsl:if test="$scalars/StatePostalAbbrev='NC' or
$scalars/StatePostalAbbrev='SC'">
- <fo:block padding-top="1em">
- In the states of North Carolina and South Carolina,
- Guaranteed Issue Underwriting is referred to as
- "Limited Underwriting" and Simplified Issue Underwriting
- is referred to as "Simplified Underwriting".
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/StatePostalAbbrev='MD'">
- <fo:block padding-top="1em">
- In the state of Maryland, Guaranteed Issue Underwriting
- is referred to as "Nonstandard Limited Underwriting"
- and Simplified Issue Underwriting is referred to as
- "Nonstandard Simplified Underwriting".
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/LoanFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/PortabilityFootnote"/>
- </fo:block>
- <xsl:if test="$scalars/HasTerm='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/TermFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasSupplSpecAmt='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/TermFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasWP='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/WaiverFootnote"/>
- </fo:block>
- </xsl:if>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/AccelBftRiderFootnote"/>
- </fo:block>
- <xsl:if test="$scalars/DefnLifeIns='GPT'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/OverloanRiderFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasADD='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/ADDFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasChildRider='1'">
- <fo:block padding-top="1em">
- The $<xsl:value-of select="$scalars/ChildRiderAmount"/>
- <xsl:value-of select="$scalars/ChildFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasSpouseRider='1'">
- <fo:block padding-top="1em">
- The $<xsl:value-of select="$scalars/SpouseRiderAmount"/>
- <xsl:value-of select="$scalars/SpouseFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/UsePartialMort='1'">
- <fo:block padding-top="1em">
- This illustration reflects the client's mortality assumption
- of <xsl:value-of
select="address@hidden'PartMortTableMult']/duration[1]/@column_value"/>
- of the <xsl:value-of select="$scalars/PartMortTableName"/>
- table with all deaths at the end of the year.
- </fo:block>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="$scalars/GenderBlended='1'">
- <fo:block padding-top="1em">
- Custom blending of cost of insurance charges is based
- on the plan's assumed distribution of initial selected
- face amount by gender and tobacco use. This illustration
- assumes that the distribution remains constant
- in future years. Custom blending is available only on plans
- of 100 or more lives. Custom blend assumptions:
- <xsl:choose>
- <xsl:when test="$scalars/SmokerBlended='1'">
- tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
- </xsl:when>
- <xsl:otherwise>
- no blending by tobacco use;
- </xsl:otherwise>
- </xsl:choose>
- male = <xsl:value-of select="$scalars/MalePct"/>.
- </fo:block>
- </xsl:when>
- <xsl:when test="$scalars/SmokerBlended='1'">
- <fo:block padding-top="1em">
- Custom blending of cost of insurance charges is based
- on the plan's assumed distribution of initial selected
- face amount by gender and tobacco use. This illustration
- assumes that the distribution remains constant
- in future years. Custom blending is available only on plans
- of 100 or more lives. Custom blend assumptions:
- tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
- <xsl:choose>
- <xsl:when test="$scalars/GenderBlended='1'">
- male = <xsl:value-of select="$scalars/MalePct"/>.
- </xsl:when>
- <xsl:otherwise>
- no blending by gender.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:when>
- </xsl:choose>
- <fo:block padding-top="1em">
- The state of issue is
- <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
- </fo:block>
- <xsl:if test="$scalars/IsInforce='1'">
- <fo:block padding-top="1em">
- This illustration assumes a beginning account value of
- $<xsl:value-of select="$scalars/InforceUnloanedAV"/> as
- of the date of this illustration.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/IsInforce='1'">
- <fo:block padding-top="1em">
- This illustration assumes a beginning cost basis of
- $<xsl:value-of select="$scalars/InforceTaxBasis"/> as
- of the date of this illustration; the actual cost basis
- may be higher or lower. Consult the Home Office for cost
- basis information.
- </fo:block>
- </xsl:if>
- <xsl:if test="$compliance_tracking_number">
- <fo:block padding-top="1em">
- Compliance tracking number:
- <xsl:value-of select="$compliance_tracking_number"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/StatePostalAbbrev='TX'">
- <xsl:if test="$scalars/UWType='Guaranteed issue'">
- <xsl:if test="$TexasFootnote='1'">
- <fo:block padding-top="1em">
- *** This policy is classified as substandard guaranteed
issue
- per the requirements of the Texas Insurance Department.
- </fo:block>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <fo:block font-weight="bold" text-align="center" padding-top="1em">
- GUARANTEED PRINCIPAL ACCOUNT
- </fo:block>
- <fo:block padding-top="1em">
- The Guaranteed Principal Account (GPA) has a guaranteed
- minimum annual interest rate of
- <xsl:value-of select="$scalars/InitAnnGenAcctInt_Guaranteed"/>.
- Guarantees are based on the claims-paying ability of the
- issuing company or companies.
- </fo:block>
- <fo:block font-weight="bold" text-align="center" padding-top="1em">
- SEPARATE ACCOUNT
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
- </fo:block>
- <xsl:if test="not($is_composite)">
- <fo:block padding-top="1em">
- This illustration is based on total Separate Account
- fund expenses of
- <xsl:value-of
select="address@hidden'TotalIMF']/duration[1]/@column_value"/>.
- </fo:block>
- <xsl:if test="$scalars/AvgFund='1'">
- <fo:block padding-top="1em">
- Investment management fees are based on equal
- initial allocations among the available funds.
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/CustomFund='1'">
- <fo:block padding-top="1em">
- Investment management fees are based on an initial allocation
- of 100% to a custom fund selected by the purchaser.
- </fo:block>
- </xsl:if>
- </xsl:if>
- <fo:block font-weight="bold" padding-top="1em">
- This material must be preceded or accompanied by the current
- prospectus for the
- <xsl:value-of select="$scalars/PolicyMktgName"/> Insurance
- <xsl:value-of select="$scalars/ContractName"/> and the
- prospectuses (or summary prospectuses, if available) for its
- underlying investment choices. Before purchasing a
- <xsl:value-of select="$scalars/ContractName"/>, you should
- carefully consider the investment objectives, risks, charges
- and expenses of the
- <xsl:value-of select="$scalars/ContractName"/> and its underlying
- investment choices. Please read the prospectuses carefully before
- investing or sending money.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/SubsidiaryFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- Securities offered through registered representatives of
- <xsl:value-of select="$scalars/CoUnderwriter"/>
- <xsl:value-of select="$scalars/CoUnderwriterAddress"/>
- or a broker-dealer that has a selling agreement with
- <xsl:value-of select="$scalars/MainUnderwriter"/>.
- </fo:block>
- </fo:block>
- <xsl:if test="not($has_supplemental_report) and $is_composite">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Illustration Assumption Detail -->
- <xsl:if test="not($is_composite)">
- <!-- Body page -->
- <fo:page-sequence master-reference="illustration-assumption">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle" select="'Illustration
Assumption Detail'"/>
- </xsl:call-template>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="illustration-assumption-report"/>
-
- </fo:page-sequence>
- </xsl:if>
-
- <!-- Supplemental Report -->
- <!-- Body page -->
- <xsl:if test="$has_supplemental_report">
- <fo:page-sequence master-reference="supplemental-report">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle" select="'Supplemental
Report'"/>
- </xsl:call-template>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Supplemental report body -->
- <xsl:call-template name="supplemental-report-body"/>
- </fo:page-sequence>
- </xsl:if>
- </fo:root>
- </xsl:template>
-
- <xsl:template name="standardheader">
- <xsl:param name="reporttitle"/>
- <fo:block text-align="center" font-size="9.75pt">
- <fo:block padding-top="1em">
- The purpose of this illustration is to show how the performance
- of the underlying investment account could affect the
- <xsl:value-of select="$scalars/ContractName"/>
- account value and death benefit.
- <fo:inline font-weight="bold">
- These hypothetical returns do not reflect past performance
- and are not predictive of future results. Actual results could be
- less than or greater than the hypothetical results
- and in all likelihood will vary from year to year.
- </fo:inline>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$reporttitle"/>
- </fo:block>
- </fo:block>
- <fo:block font-size="10pt" font-family="sans-serif">
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column column-width="125mm"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell padding-right="2mm">
- <fo:block text-align="left">
- <xsl:choose>
- <xsl:when test="$is_composite">
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/CorpName"/>
- <xsl:with-param name="length" select="60"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="not($scalars/Insured1=' ')">
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/Insured1"/>
- <xsl:with-param name="length" select="30"/>
- </xsl:call-template>,
- <xsl:value-of select="$scalars/Gender"/>
- <!-- xsl:text prevents space from being stripped -->
- <xsl:text> </xsl:text>
- <xsl:value-of select="$scalars/Smoker"/> rates,
- Age <xsl:value-of select="$scalars/Age"/>
- </xsl:when>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$is_composite">
- <fo:block text-align="left">
- Composite
- </fo:block>
- </xsl:if>
- <fo:block text-align="left">
- <xsl:value-of
select="concat(translate(substring($scalars/ContractName,1,1), $lowerAZ,
$upperAZ), substring($scalars/ContractName,2))"/>: <xsl:value-of
select="$scalars/PolicyMktgName"/>
- </fo:block>
- <xsl:if test="$GroupCarveout='1'">
- <fo:block text-align="left">
- Minimum Initial Premium: $<xsl:value-of
select="$scalars/InitMinPrem"/>
- </fo:block>
- </xsl:if>
- <fo:block text-align="left">
- First Year Premium: $<xsl:value-of select="$scalars/InitPrem"/>
- </fo:block>
- <xsl:if test="not($is_composite)">
- <fo:block text-align="left">
- <xsl:choose>
- <xsl:when test="$scalars/UWType='Medical'">
- Fully underwritten,
- </xsl:when>
- <xsl:when test="$scalars/StatePostalAbbrev='TX' and
$scalars/UWType='Guaranteed issue' and $TexasFootnote='1'">
- Substandard ***,
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/UWType"/>,
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="$scalars/UWClass"/>,
- Initial Death Benefit Option:
- <xsl:value-of select="$scalars/InitDBOpt"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="not($is_composite) and $scalars/UWClass='Rated'">
- <fo:block text-align="left">
- Table Rating:
- <xsl:value-of select="$scalars/SubstandardTable"/>
- </fo:block>
- </xsl:if>
- <xsl:call-template
name="print-mastercontractnumber-and-contractnumber"/>
- </fo:table-cell>
- <fo:table-cell>
-<!-- Keep intact in case it's useful to others; however, regulators may find
-it confusing if the general account rates aren't included, too.
- <fo:block text-align="left">
- Assumed Separate Account Rate:
- <fo:block text-align="left">
- Gross
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_Current"/>
- Net)*
- </fo:block>
- </fo:block>
--->
- <fo:block text-align="left">
- Assumed Premium Allocation:**
- <fo:block text-align="left">
- Separate Account: <xsl:value-of
select="format-number(1 - $scalars/GenAcctAllocation, '###%')"/>
- </fo:block>
- <fo:block>
- Guaranteed Principal Account
(GPA): <xsl:value-of select="format-number($scalars/GenAcctAllocation,
'###%')"/>
- </fo:block>
- </fo:block>
- <fo:block text-align="left">
- Initial
- <xsl:if test="$scalars/HasTerm='1' or
$scalars/HasSupplSpecAmt='1'">
- Total
- </xsl:if>
- Face Amount: $<xsl:value-of select="$scalars/InitTotalSA"/>
- </fo:block>
- <xsl:if test="$scalars/HasTerm='1' or
$scalars/HasSupplSpecAmt='1'">
- <fo:block text-align="left">
- Initial Base Face Amount:
- $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
- </fo:block>
- <fo:block text-align="left">
- Initial
- <xsl:if test="$scalars/HasTerm='1'">
- Term Face Amount:
- </xsl:if>
- <xsl:if test="$scalars/HasSupplSpecAmt='1'">
- Supplemental Face Amount:
- </xsl:if>
- $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
- </fo:block>
- </xsl:if>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </xsl:template>
-
- <xsl:template name="basic-illustration-report">
- <!-- columns for generate basic-illustration-report -->
- <xsl:variable name="basic_illustration_columns_raw">
- <!--
- The 'composite' attribute (if present) indicates that the column
- is only to be included when the report type is (not) a composite.
- -->
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column composite="1"/>
- <column name="CSVNet_GuaranteedZero">Cash Surr _Value</column>
- <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
- <column/>
- <column name="CSVNet_Guaranteed">Cash Surr Value</column>
- <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
- <column/>
- <column name="CSVNet_CurrentZero">Cash Surr Value</column>
- <column name="EOYDeathBft_CurrentZero">Death _Benefit</column>
- <column/>
- <column name="CSVNet_Current">Cash Surr Value</column>
- <column name="EOYDeathBft_Current">Death _Benefit</column>
- </xsl:variable>
- <xsl:variable name="basic_illustration_columns"
select="document('')//xsl:address@hidden'basic_illustration_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$basic_illustration_columns[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <!-- Custom part (the biggest) of the table header -->
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="5">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- Using guaranteed charges
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="5">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- Using current charges
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
- Assumed Sep Acct
- </fo:block>
- <fo:block text-align="center">
- Gross Rate*
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_GuaranteedZero"/>
- net)
- </fo:block>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
- GPA rate
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
- Assumed Sep Acct
- </fo:block>
- <fo:block text-align="center">
- Gross Rate*
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_Guaranteed"/>
- net)
- </fo:block>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
- GPA rate
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
- Assumed Sep Acct
- </fo:block>
- <fo:block text-align="center">
- Gross Rate*
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_CurrentZero"/>
- net)
- </fo:block>
- <fo:block text-align="center">
- <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
- GPA rate
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
- Assumed Sep Acct
- </fo:block>
- <fo:block text-align="center">
- Gross Rate*
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_Current"/>
- net)
- </fo:block>
- <fo:block text-align="center">
- <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
- GPA rate
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
-
- <!-- Generic part of the table header -->
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="supplemental-illustration-report">
- <xsl:variable name="supplemental_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column composite="1"/>
- <column name="PolicyFee_Current">Admin _Charge</column>
- <column name="PremTaxLoad_Current">Premium _Tax Load</column>
- <column name="DacTaxLoad_Current">DAC _Tax Load</column>
- <column name="NetPmt_Current">Net _Premium</column>
- <column name="COICharge_Current">Cost of Insurance _Charges</column>
- <column name="AcctVal_Current">Current _Account _Value</column>
- <column name="CSVNet_Current">Current _Cash Surr _Value</column>
- <column name="EOYDeathBft_Current">Current _Death _Benefit</column>
- </xsl:variable>
- <xsl:variable name="supplemental_illustration_columns"
select="document('')//xsl:address@hidden'supplemental_illustration_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$supplemental_illustration_columns[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="supplemental-illustration-report-split-premiums">
- <xsl:variable name="supplemental_illustration_columns_split_premiums">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="ErGrossPmt">ER Gross _Payment</column>
- <column composite="1"/>
- <column name="EeGrossPmt">EE Gross _Payment</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column name="ErModalMinimumPremium">ER Modal _Minimum _Premium</column>
- <column name="EeModalMinimumPremium">EE Modal _Minimum _Premium</column>
- <column name="NetPmt_Current">Net _Premium</column>
- <column name="COICharge_Current">Cost of Insurance _Charges</column>
- <column name="AcctVal_Current">Current _Account _Value</column>
- <column name="CSVNet_Current">Current _Cash Surr _Value</column>
- <column name="EOYDeathBft_Current">Current _Death _Benefit</column>
- </xsl:variable>
- <xsl:variable name="supplemental_illustration_columns"
select="document('')//xsl:address@hidden'supplemental_illustration_columns_split_premiums']/column"/>
- <xsl:variable name="columns"
select="$supplemental_illustration_columns[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="illustration-assumption-report">
- <!-- columns to be included in the table -->
- <xsl:variable name="illustration_assumption_columns_raw">
- <column name="PolicyYear">|Policy _Year</column>
-
- <column composite="1"/>
- <column composite="1" name="NetWD">|Withdrawal</column>
- <column composite="1"/>
- <column composite="1" name="NewCashLoan">|Loan</column>
- <column composite="1"/>
-
- <column composite="0" name="AttainedAge">|End of _Year Age</column>
- <column composite="0"/>
- <column composite="0" name="AnnSAIntRate_Current">Net Crediting Rate|Sep
Acct</column>
- <column composite="0" name="AnnGAIntRate_Current">Net Crediting Rate|Gen
Acct</column>
- <column composite="0" name="CurrMandE">|M&E</column>
- <column composite="0" name="EeMode">|Indiv _Pmt Mode</column>
- <column composite="0" name="ErMode">|Corp _Pmt Mode</column>
- <column composite="0" scalar="InitAnnLoanDueRate">|Assumed _Loan
Interest</column>
- </xsl:variable>
- <xsl:variable name="illustration_assumption_columns"
select="document('')//xsl:address@hidden'illustration_assumption_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$illustration_assumption_columns[not(@composite) or
(boolean(@composite='1')=$is_composite)]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:choose>
- <xsl:when test="$is_composite">
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
- </xsl:when>
- <xsl:otherwise><!-- not($is_composite) -->
- <!--
- The special feature requested: the cell 'Net Crediting Rate'
- to be nicely centered over two cells.
- Thus use 'illustration-assumption-custom-headers',
- not the generic 'generate-table-header'.
- -->
- <xsl:call-template
name="illustration-assumption-custom-headers"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- <xsl:if test="not($has_supplemental_report)">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="list-fund-allocation">
- <xsl:param name="counter"/>
- <xsl:if
test="address@hidden'FundNames']/duration[$counter]/@column_value!=''">
- <fo:block>
- <xsl:value-of
select="address@hidden'FundAllocations']/duration[$counter]/@column_value"/>
- <xsl:value-of
select="address@hidden'FundNames']/duration[$counter]/@column_value"/>
- </fo:block>
- <xsl:call-template name="list-fund-allocation">
- <xsl:with-param name="counter" select="$counter + 1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="standardfooter">
- <xsl:param name="omit-pagenumber" select="boolean(0)"/>
- <xsl:param name="include-underwriter" select="boolean(0)"/>
- <xsl:call-template name="generic-footer">
- <xsl:with-param name="top-block">
-<!--
- <xsl:if test="$include-underwriter">
- <fo:block padding-top="1em">
- The Principal Underwriter is
- <xsl:value-of select="$scalars/MainUnderwriter"/>
- , a wholly owned subsidiary of
- <xsl:value-of select="$scalars/InsCoName"/>
- and is located at
- <fo:block>
- <xsl:value-of select="$scalars/MainUnderwriterAddress"/>
- </fo:block>
- </fo:block>
- </xsl:if>
--->
- <fo:block>
- * This illustration is based on the assumed Gross Rate shown.
- The Net Rate is provided for information purposes only.
- </fo:block>
- <fo:block>
- ** <xsl:value-of select="$scalars/PremAllocationFootnote"/>
- </fo:block>
- <fo:block padding-top="0.25em">
- See the Explanatory Notes for important
- <xsl:value-of select="$scalars/ContractName"/> information.
- This illustration is not complete without all pages.
- </fo:block>
- </xsl:with-param>
- <xsl:with-param name="left-block">
- <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
- <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
- </xsl:with-param>
- <xsl:with-param name="center-block">
- <fo:block>
- Date Prepared:
- <xsl:call-template name="date-prepared"/>
- </fo:block>
- <xsl:if test="$scalars/LmiVersion!=''">
- <fo:block>
- System Version:
- <xsl:value-of select="$scalars/LmiVersion"/>
- </fo:block>
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="right-block">
- <fo:block>
- Policy Form:
- <xsl:value-of select="$scalars/PolicyForm"/>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="not($omit-pagenumber)">
- <xsl:call-template name="page-of"/>
- </xsl:when>
- <xsl:otherwise>
- Attachment
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:template>
-
- <xsl:template name="set_group_carveout">
- <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible
Premium Variable Adjustable Life Insurance Certificate')"/>
- </xsl:template>
-
- <xsl:template name="set_texas_footnote">
- <xsl:value-of select="number($scalars/PolicyLegalName='Flexible Premium
Variable Adjustable Life Insurance Policy')"/>
- </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/objects.make b/objects.make
index 15ddca7..5e8080c 100644
--- a/objects.make
+++ b/objects.make
@@ -174,11 +174,6 @@ cli_objects := \
# Illustrations: files shared by the antediluvian and production branches.
-# PDF !! Expunge these two object files
-# ledger_xml_io.o
-# ledger_xsl.o
-# from the list below.
-
common_common_objects := \
$(boost_filesystem_objects) \
$(xmlwrapp_objects) \
@@ -230,8 +225,6 @@ common_common_objects := \
ledger_text_formats.o \
ledger_variant.o \
ledger_variant_init.o \
- ledger_xml_io.o \
- ledger_xsl.o \
ledgervalues.o \
license.o \
loads.o \
diff --git a/reg_d_group.xsl b/reg_d_group.xsl
deleted file mode 100644
index 7c66a65..0000000
--- a/reg_d_group.xsl
+++ /dev/null
@@ -1,912 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Life insurance illustrations.
-
- Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
- http://savannah.nongnu.org/projects/lmi
- email: <address@hidden>
- snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp " ">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
- <xsl:import href="fo_common.xsl"/>
- <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
- <xsl:template match="/">
- <fo:root>
- <fo:layout-master-set>
-
- <!-- Define the cover page. -->
- <fo:simple-page-master master-name="cover">
- <xsl:call-template name="set-page-size"/>
- <fo:region-body margin=".1in .1in 0in"/>
- </fo:simple-page-master>
-
- <!-- Define the Column Definitions page. -->
- <fo:simple-page-master master-name="column-definitions">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.25in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1in"/>
- </fo:simple-page-master>
-
- <!-- Define the narrative summary page. -->
- <fo:simple-page-master master-name="narrative-summary">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.5in 0 1.25in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1in"/>
- </fo:simple-page-master>
-
- <!-- Define the narrative summary page. -->
- <fo:simple-page-master
master-name="narrative-summary-separate-account">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.25in 0 3in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1in"/>
- </fo:simple-page-master>
-
- <!-- Define the Basic Illustration page. -->
- <fo:simple-page-master master-name="basic-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3in 0 1.25in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1in"/>
- </fo:simple-page-master>
-
- <!-- Define the Supplemental Illustration page. -->
- <fo:simple-page-master master-name="supplemental-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="3in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".9in"/>
- </fo:simple-page-master>
-
- <!-- Define the Illustration Assumption Detail page. -->
- <fo:simple-page-master master-name="illustration-assumption">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.8in 0 1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".9in"/>
- </fo:simple-page-master>
-
- <!-- Define the Supplemental Report page. -->
- <xsl:if test="$has_supplemental_report">
- <fo:simple-page-master master-name="supplemental-report">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.8in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent="1in"/>
- </fo:simple-page-master>
- </xsl:if>
-
- </fo:layout-master-set>
-
- <!-- The data to be displayed in the pages, cover page first. -->
- <xsl:call-template name="generic-cover"/>
-
- <!-- Basic Illustration -->
- <!-- Body page -->
- <fo:page-sequence master-reference="basic-illustration"
initial-page-number="1">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- Basic Illustration
- </xsl:when>
- <xsl:otherwise>
- In Force Basic Illustration
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- </xsl:call-template>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="basic-illustration-report"/>
-
- </fo:page-sequence>
-
- <!-- Supplemental Illustration -->
- <!-- narrative summary - begins here -->
- <fo:page-sequence master-reference="column-definitions">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Column Definitions Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block text-align="left" font-size="10pt"
font-family="sans-serif">
- <fo:block font-weight="bold" text-align="center"
padding-bottom="2em">
- Column Definitions
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="2em">
- Policy Year
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/PolicyYearFootnote"/>
- </fo:block>
-
- <xsl:if test="not($is_composite)">
- <fo:block font-weight="bold" padding-top="2em">
- End of Year Age
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/AttainedAgeFootnote"/>
- </fo:block>
- </xsl:if>
-
- <fo:block font-weight="bold" padding-top="2em">
- Premium Outlay
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/OutlayFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="2em">
- Cash Surrender Value
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
- </fo:block>
-
- <fo:block font-weight="bold" padding-top="2em">
- Death Benefit
- </fo:block>
- <fo:block>
- <xsl:value-of select="$scalars/DeathBenefitFootnote"/>
- </fo:block>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- narrative summary - begins here -->
- <fo:page-sequence master-reference="narrative-summary">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle" select="'Narrative Summary'"/>
- </xsl:call-template>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- narrative summary Summary Body -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block text-align="left" font-size="10pt"
font-family="sans-serif">
- <fo:block>
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- is a <xsl:value-of select="$scalars/PolicyLegalName"/>
- issued by <xsl:value-of select="$scalars/InsCoName"/>.
- <xsl:value-of select="$scalars/ProductDescription"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline text-decoration="underline">Stable Value
Feature</fo:inline>
- <xsl:value-of select="$scalars/StableValueFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- This illustration assumes Initial Death Benefit Option
- <xsl:value-of select="$scalars/InitDBOpt"/>.
- </fo:block>
- <fo:block padding-top="1em">
- This policy is only available to entities that meet the
definition
- of "accredited investor" or "qualified purchaser" under
applicable
- Federal securities laws. Purchase of this policy is suitable
- only for entities of substantial economic means. Each prospective
- purchaser will be required to represent that it is familiar
- with and understands the fundamental risks and financial hazards
- of purchasing the policy. Each prospective purchaser must
- also represent that it meets minimum financial and other
- suitability standards.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/NoVanishPremiumFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- The definition of life insurance elected for this contract
- is the
- <xsl:choose>
- <xsl:when test="$scalars/DefnLifeIns='GPT'">
- guideline premium test. The guideline single premium
- is $<xsl:value-of select="$scalars/InitGSP"/>
- and the guideline level premium
- is $<xsl:value-of select="$scalars/InitGLP"/>.
- </xsl:when>
- <xsl:otherwise>
- cash value accumulation test.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/InsCoName"/>
- <xsl:value-of select="$scalars/RejectPremiumFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- Account values, cash surrender values, and death benefits
- are illustrated as of the end of the year.
- </fo:block>
- <fo:block padding-top="1em">
- PLEASE READ THE FOLLOWING IMPORTANT TAX DISCLOSURE
- </fo:block>
- <fo:block>
- The initial 7-pay premium limit is
- $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
- As illustrated, this contract
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- fails
- </xsl:when>
- <xsl:otherwise>
- passes
- </xsl:otherwise>
- </xsl:choose>
- the seven-pay test defined in Section 7702A
- of the Internal Revenue Code and therefore
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- <xsl:choose>
- <xsl:when test="$scalars/MecYear!='0'">
- becomes a Modified Endowment Contract (MEC) in policy
year
- <xsl:value-of select="$scalars/MecYear+1"/>.
- </xsl:when>
- <xsl:otherwise>
- is a Modified Endowment Contract (MEC).
- </xsl:otherwise>
- </xsl:choose>
- As a MEC, any loans or withdrawals are taxed to the extent
- of any gain in the contract, and an additional 10% penalty
- tax will apply to the taxable portion of the loan
- or withdrawal.
- </xsl:when>
- <xsl:otherwise>
- is not a Modified Endowment Contract (MEC).
- Subsequent changes in the contract, including but not limited
- to increases and decreases in premiums or benefits, may cause
- the contract to be retested and may result in the contract
- becoming a MEC.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block font-weight="bold" padding-top="1em">
- This illustration is not written or intended as tax
- or legal advice and may not be relied on for purposes
- of avoiding any federal tax penalties. For more information
- pertaining to the tax consequences of purchasing
- or owning this policy, consult with your own independent tax
- or legal counsel.
- </fo:block>
-
- <!-- Force new page -->
- <fo:block break-after="page"/>
-
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- The loan interest rate may be fixed or adjustable as elected
- by the policy owner.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/UseExperienceRating='1'">
- <xsl:value-of select="$scalars/ExpRatingFootnote"/>
- </xsl:when>
- <xsl:otherwise>
- The illustration does not assume any mortality
- experience rating.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </fo:block>
- <fo:block padding-top="1em" font-size="10pt">
- <fo:block font-weight="bold">
- This illustration may only be used when preceded or accompanied
- by the offering memorandum for
- <xsl:value-of select="$scalars/PolicyLegalName"/>
- (<xsl:value-of select="$scalars/PolicyMktgName"/>)
- insurance contract and its underlying investment choices.
- For a complete listing of the underlying investment choices,
- please refer to the offering memorandum. Before purchasing
- a variable life insurance contract, investors should
- carefully consider the investment objectives, risks, charges
- and expenses of the variable life insurance contract
- and its underlying investment choices. Please read
- the offering memorandum carefully before investing
- or sending money.
- </fo:block>
-
- <xsl:if test="$scalars/HasTerm='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/TermFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasWP='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/WaiverFootnote"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/UsePartialMort='1'">
- <fo:block padding-top="1em">
- This illustration reflects an initial mortality assumption
- of <xsl:value-of
select="address@hidden'PartMortTableMult']/duration[1]/@column_value"/>
- of the <xsl:value-of select="$scalars/PartMortTableName"/>
table
- with all deaths at the end of the year.
- </fo:block>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="$scalars/GenderBlended='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/MortalityBlendFootnote"/>
- Custom blend assumptions:
- <xsl:choose>
- <xsl:when test="$scalars/SmokerBlended='1'">
- tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
- </xsl:when>
- <xsl:otherwise>
- no blending by tobacco use;
- </xsl:otherwise>
- </xsl:choose>
- male = <xsl:value-of select="$scalars/MalePct"/>.
- </fo:block>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="$scalars/SmokerBlended='1'">
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/MortalityBlendFootnote"/>
- Custom blend assumptions:
- tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
- <xsl:choose>
- <xsl:when test="$scalars/GenderBlended='1'">
- male = <xsl:value-of select="$scalars/MalePct"/>.
- </xsl:when>
- <xsl:otherwise>
- no blending by gender.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- <fo:block padding-top="1em">
- The state of issue
- is <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
- </fo:block>
- <xsl:if test="$compliance_tracking_number">
- <fo:block padding-top="1em">
- Compliance tracking number:
- <xsl:value-of select="$compliance_tracking_number"/>
- </fo:block>
- </xsl:if>
-
- <fo:block padding-top="1em">
- SEPARATE ACCOUNT
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- This illustration is based on total Separate Account fund
expenses
- of <xsl:value-of
select="address@hidden'TotalIMF']/duration[1]/@column_value"/>.
- </fo:block>
- <fo:block font-weight="bold" padding-top="1em">
- This illustration may not reflect your actual tax
- and accounting consequences and is not intended as tax advice
- nor may it be relied on for purposes of avoiding any federal
- tax penalties. Consult professional tax advisors for tax advice.
- </fo:block>
- <fo:block padding-top="1em">
- Placement Agents:
- <xsl:value-of select="$scalars/CoUnderwriter"/> serves as the
- placement agent for contracts sold by its registered
- representatives.
- <xsl:value-of select="$scalars/MainUnderwriter"/>
- serves as the placement agent for contracts sold by registered
- representatives of other broker-dealers that have entered into
- distribution agreements with
- <xsl:value-of select="$scalars/MainUnderwriter"/>.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/CoUnderwriter"/> and
- <xsl:value-of select="$scalars/MainUnderwriter"/> are
- subsidiaries of <xsl:value-of select="$scalars/InsCoName"/>
- (<xsl:value-of select="$scalars/InsCoShortName"/>) and are
- located at <xsl:value-of select="$scalars/InsCoStreet"/>.
- </fo:block>
- </fo:block>
- <xsl:if test="not($has_supplemental_report)">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Supplemental Report -->
- <!-- Body page -->
- <xsl:if test="$has_supplemental_report">
- <fo:page-sequence master-reference="supplemental-report">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- <xsl:call-template name="standardheader">
- <xsl:with-param name="reporttitle" select="'Supplemental
Report'"/>
- </xsl:call-template>
- <xsl:call-template name="dollar-units"/>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Supplemental report body -->
- <xsl:call-template name="supplemental-report-body"/>
- </fo:page-sequence>
- </xsl:if>
- </fo:root>
- </xsl:template>
-
- <xsl:template name="standardheader">
- <xsl:param name="reporttitle"/>
- <fo:block text-align="center" font-size="9.75pt">
- <fo:block padding-top="1em">
- The purpose of this illustration is to show how the performance
- of the underlying separate account divisions could affect
- the contract account value and death benefit.
- <fo:inline font-weight="bold">
- The hypothetical returns do not reflect past performance
- and are not predictive of future results. Actual results
- could be less than or greater than the hypothetical results
- and in all likelihood will vary year to year.
- </fo:inline>
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$reporttitle"/>
- </fo:block>
- </fo:block>
- <xsl:variable name="header-width" select="33"/>
- <xsl:variable name="header-field-width">
- <xsl:value-of select="$header-width * 0.44"/>pc
- </xsl:variable>
- <fo:block font-size="10pt" font-family="sans-serif">
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column column-width="125mm"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell padding-right="2mm">
- <fo:block text-align="left">
- <xsl:choose>
- <xsl:when test="$is_composite">
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/CorpName"/>
- <xsl:with-param name="length" select="60"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="not($scalars/Insured1=' ')">
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/Insured1"/>
- <xsl:with-param name="length" select="30"/>
- </xsl:call-template>,
- <xsl:value-of select="$scalars/Gender"/>
- <!-- xsl:text here prevents stripping of spaces by XSLT -->
- <xsl:text> </xsl:text>
- <xsl:value-of select="$scalars/Smoker"/> rates,
- Age <xsl:value-of select="$scalars/Age"/>
- </xsl:when>
- </xsl:choose>
- </fo:block>
- <xsl:if test="$is_composite">
- <fo:block text-align="left">
- Composite
- </fo:block>
- </xsl:if>
- <fo:block text-align="left">
- Contract: <xsl:value-of select="$scalars/PolicyMktgName"/>
- </fo:block>
- <fo:block text-align="left">
- Initial Premium: $<xsl:value-of select="$scalars/InitPrem"/>
- </fo:block>
- <xsl:if test="not($is_composite)">
- <fo:block text-align="left">
- <xsl:choose>
- <xsl:when test="$scalars/UWType='Medical'">
- Fully underwritten,
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/UWType"/>,
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="$scalars/UWClass"/>,
- Initial Death Benefit Option:
- <xsl:value-of select="$scalars/InitDBOpt"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="$scalars/HasWP='1'">
- <fo:block text-align="left">
- Waiver of Monthly Charges Rider elected.
- </fo:block>
- </xsl:if>
- <xsl:call-template
name="print-mastercontractnumber-and-contractnumber"/>
- </fo:table-cell>
-
- <fo:table-cell>
- <fo:block text-align="left">
- Assumed Gross Rate:
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
- (<xsl:value-of select="$scalars/InitAnnSepAcctNetInt_Current"/>
- Net)*
- </fo:block>
- <fo:block text-align="left">
- Initial
- <xsl:if test="$scalars/HasTerm!='0'">
- Total
- </xsl:if>
- Face Amount: $<xsl:value-of select="$scalars/InitTotalSA"/>
- </fo:block>
- <xsl:if test="$scalars/HasTerm!='0'">
- <fo:block text-align="left">
- Initial Base Face Amount:
- $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
- </fo:block>
- <fo:block text-align="left">
- Initial Term Face Amount:
- $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="not($is_composite) and ($scalars/UWClass='Rated')">
- <fo:block text-align="left">
- Table Rating:
- <xsl:value-of select="$scalars/SubstandardTable"/>
- </fo:block>
- </xsl:if>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </xsl:template>
-
- <xsl:template name="basic-illustration-report">
- <xsl:variable name="basic_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column composite="1"/>
- <column name="CSVNet_GuaranteedZero">Cash Surr _Value</column>
- <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
- <column/>
- <column name="CSVNet_Guaranteed">Cash Surr Value</column>
- <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
- <column/>
- <column name="CSVNet_CurrentZero">Cash Surr Value</column>
- <column name="EOYDeathBft_CurrentZero">Death _Benefit</column>
- <column/>
- <column name="CSVNet_Current">Cash Surr Value</column>
- <column name="EOYDeathBft_Current">Death _Benefit</column>
- </xsl:variable>
- <xsl:variable name="basic_illustration_columns"
select="document('')//xsl:address@hidden'basic_illustration_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$basic_illustration_columns[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <!-- Custom part (the biggest) of the table header -->
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="5">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- Using guaranteed charges
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="5">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- Using current charges
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
- Hypothetical Gross
- </fo:block>
- <fo:block text-align="center">
- Return
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_GuaranteedZero"/>
- net)
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
- Hypothetical Gross
- </fo:block>
- <fo:block text-align="center">
- Return
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_Guaranteed"/>
- net)
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
- Hypothetical Gross
- </fo:block>
- <fo:block text-align="center">
- Return
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_CurrentZero"/>
- net)
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
- Hypothetical Gross
- </fo:block>
- <fo:block text-align="center">
- Return
- (<xsl:value-of
select="$scalars/InitAnnSepAcctNetInt_Current"/>
- net)
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- <!-- Generic part of the table header -->
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="supplemental-illustration">
- <xsl:variable name="supplemental_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="Outlay">Premium _Outlay</column>
- <column composite="1"/>
- <column name="PolicyFee_Current">Admin _Charge</column>
- <column name="PremTaxLoad_Current">Premium _Tax Load</column>
- <column name="DacTaxLoad_Current">DAC _Tax Load</column>
- <column name="NetPmt_Current">Net _Premium</column>
- <column name="COICharge_Current">Mortality _Charge</column>
- <column name="AcctVal_Current">Account _Value</column>
- <column name="CSVNet_Current">Cash Surr _Value</column>
- <column name="EOYDeathBft_Current">Death _Benefit</column>
- </xsl:variable>
- <xsl:variable name="supplemental_illustration_columns"
select="document('')//xsl:address@hidden'supplemental_illustration_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$supplemental_illustration_columns[not(@composite) or
boolean(boolean(@composite='1')=$is_composite)]"/>
-
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="illustration-assumption">
- <xsl:variable name="illustration_assumption_columns_raw">
- <column name="PolicyYear">|Policy _Year</column>
- <column composite="0" name="AttainedAge">|End of _Year Age</column>
- <column composite="0" name="AnnSAIntRate_Current">Net Crediting Rate|Sep
Acct</column>
- <column composite="0" name="AnnGAIntRate_Current">Net Crediting Rate|Gen
Acct</column>
- <column composite="0" name="CurrMandE">|M&E</column>
- <column name="NetWD">|Withdrawal</column>
- <column name="NewCashLoan">|Loan</column>
- <column composite="0" name="EeMode">|Indiv _Pmt Mode</column>
- <column composite="0" name="ErMode">|Corp _Pmt Mode</column>
- <column composite="0" scalar="InitAnnLoanDueRate">|Assumed _Loan
Interest</column>
- <column composite="0" name="AnnualFlatExtra">|Flat Extra _Per
1,000</column>
- </xsl:variable>
- <xsl:variable name="illustration_assumption_columns"
select="document('')//xsl:address@hidden'illustration_assumption_columns_raw']/column"/>
- <xsl:variable name="columns"
select="$illustration_assumption_columns[not(@composite) or
(boolean(@composite='1')=$is_composite)]"/>
-
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- <xsl:if test="not($has_supplemental_report)">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="list-fund-allocation">
- <xsl:param name="counter"/>
- <xsl:if
test="address@hidden'FundNames']/duration[$counter]/@column_value!=''">
- <fo:block>
- <xsl:value-of
select="address@hidden'FundAllocations']/duration[$counter]/@column_value"/>
- <xsl:value-of
select="address@hidden'FundNames']/duration[$counter]/@column_value"/>
- </fo:block>
- <xsl:call-template name="list-fund-allocation">
- <xsl:with-param name="counter" select="$counter + 1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="standardfooter">
- <xsl:param name="omit-pagenumber" select="boolean(0)"/>
- <xsl:call-template name="generic-footer">
- <xsl:with-param name="top-block">
- <fo:block>
- * This illustration is based on the assumed Gross Rate shown.
- The Net Rate is provided for information purposes only.
- </fo:block>
- <fo:block>
- See the Narrative Summary for important policy information.
- This illustration is not complete without all pages.
- </fo:block>
- </xsl:with-param>
- <xsl:with-param name="left-block">
- <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
- <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
- </xsl:with-param>
- <xsl:with-param name="center-block">
- <fo:block>
- Date Prepared:
- <xsl:call-template name="date-prepared"/>
- </fo:block>
- <xsl:if test="$scalars/LmiVersion!=''">
- <fo:block>
- System Version:
- <xsl:value-of select="$scalars/LmiVersion"/>
- </fo:block>
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="right-block">
- <fo:block>
- Policy Form:
- <xsl:value-of select="$scalars/PolicyForm"/>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="not($omit-pagenumber)">
- <xsl:call-template name="page-of"/>
- </xsl:when>
- <xsl:otherwise>
- Attachment
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/reg_d_individual.xsl b/reg_d_individual.xsl
deleted file mode 100644
index 7db0280..0000000
--- a/reg_d_individual.xsl
+++ /dev/null
@@ -1,1022 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Life insurance illustrations.
-
- Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
- http://savannah.nongnu.org/projects/lmi
- email: <address@hidden>
- snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp " ">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
- <xsl:import href="fo_common.xsl"/>
- <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
- <xsl:template match="/">
- <fo:root>
- <fo:layout-master-set>
-
- <!-- Define the cover page. -->
- <fo:simple-page-master master-name="cover">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="1.3in 0 1.2in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the IRR (Guaranteed Charges) Illustration page. -->
- <fo:simple-page-master master-name="irr-guaranteed-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.7in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the IRR (Current Charges) Illustration page -->
- <fo:simple-page-master master-name="irr-current-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.7in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the Current Values Illustration page -->
- <fo:simple-page-master master-name="current-illustration">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.7in 0 1.2in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the Explanation and Footnotes page 1. -->
- <fo:simple-page-master master-name="explanation-and-footnotes-1">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="1in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="1in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the Explanation and Footnotes page 2. -->
- <fo:simple-page-master master-name="explanation-and-footnotes-2">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="1in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="1in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the Certification Statements page. -->
- <fo:simple-page-master master-name="certification-statements">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="1.6in 0 1.1in"/>
- <!-- Header -->
- <fo:region-before extent="1in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
-
- <!-- Define the Supplemental Illustration page. -->
- <xsl:if test="$has_supplemental_report">
- <fo:simple-page-master master-name="supplemental-report">
- <xsl:call-template name="set-page-size"/>
- <!-- Central part of page -->
- <fo:region-body margin="2.6in 0 1.5in"/>
- <!-- Header -->
- <fo:region-before extent="3in"/>
- <!-- Footer -->
- <fo:region-after extent=".75in"/>
- </fo:simple-page-master>
- </xsl:if>
- </fo:layout-master-set>
-
- <!-- Cover Page -->
- <!-- Body page -->
- <fo:page-sequence master-reference="cover" force-page-count="no-force">
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter">
- <xsl:with-param name="omit-disclaimer" select="1"/>
- </xsl:call-template>
-
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-weight="bold" font-size="11pt"
font-family="sans-serif" text-align="center">
- <fo:block font-size="18pt" padding="1em 0 25pt">
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- </fo:block>
- <fo:block font-size="12pt" padding-after="45pt">
- Hypothetical Life Insurance Illustration
- </fo:block>
- <fo:block padding-after="25pt">
- Prepared by: <xsl:value-of select="$scalars/InsCoShortName"/>
- </fo:block>
- <fo:block padding-after="25pt">
- Prepared for:
- <!--
- Properly adjust for long user input strings: limit output
- to 140 characters for approximately two lines.
- -->
- <xsl:call-template name="limitstring">
- <xsl:with-param name="length" select="140"/>
- <xsl:with-param name="passString">
- <xsl:choose>
- <xsl:when test="not($is_composite)">
- <xsl:value-of select="$scalars/Insured1"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/CorpName"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- </xsl:call-template>
- </fo:block>
- <fo:block padding-after="110.0pt">
- Date Prepared: <xsl:call-template name="date-prepared"/>
- </fo:block>
- </fo:block>
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block padding-after="10.0pt">
- The purpose of this illustration is to show how hypothetical
rates
- of return will affect policy account value. These hypothetical
- returns do not reflect past performance and are not predictive
- of future results. Actual results could be less than or greater
- than the hypothetical rates and in all likelihood will vary from
- year to year.
- </fo:block>
- <fo:block font-weight="bold" padding-after="10.0pt">
- This material must be preceded or accompanied by the current
- Confidential Private Placement Memorandum for
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- and the current prospectuses (or summary prospectuses,
- if available) and private placement memoranda
- for its underlying investment choices. Investors should
- carefully consider the investment objectives, risks,
- charges and expenses of the policy and its underlying investment
- choices. Please read the prospectuses and private placement
- memoranda carefully before investing or sending money.
- </fo:block>
- <fo:block padding-after="10.0pt">
- <xsl:value-of select="$scalars/PolicyMktgName"/>
- <xsl:value-of select="$scalars/IssuingCompanyFootnote"/>
- </fo:block>
- <fo:block padding-after="10.0pt">
- Placement Agents:
- <xsl:value-of select="$scalars/PlacementAgentFootnote"/>
- </fo:block>
- <fo:block padding-after="10.0pt">
- <xsl:value-of select="$scalars/SubsidiaryFootnote"/>
- </fo:block>
- <fo:block padding-after="10.0pt">
- <xsl:value-of select="$scalars/MarketingNameFootnote"/>
- </fo:block>
- <fo:block>
- Compliance tracking number:
- <xsl:value-of select="$compliance_tracking_number"/>
- </fo:block>
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- IRR (Guaranteed Charges) Illustration -->
- <!-- Body page -->
- <fo:page-sequence master-reference="irr-guaranteed-illustration">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="standardheader">
- <xsl:with-param name="displaycontractlanguage" select="1"/>
- <xsl:with-param name="displaydisclaimer" select="1"/>
- </xsl:call-template>
- <fo:block text-align="center" font-size="9pt" font-family="serif"
padding-top="1em">
- End of Year Policy Values using Guaranteed Charges
- <xsl:call-template name="dollar-units"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="irr-guaranteed-illustration-report"/>
-
- </fo:page-sequence>
-
- <!-- IRR (Current Charges) Illustration page. -->
- <!-- Body page -->
- <fo:page-sequence master-reference="irr-current-illustration">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="standardheader">
- <xsl:with-param name="displaycontractlanguage" select="1"/>
- <xsl:with-param name="displaydisclaimer" select="1"/>
- </xsl:call-template>
- <fo:block text-align="center" font-size="9pt" font-family="serif"
padding-top="1em">
- End of Year Policy Values using Current Charges
- <xsl:call-template name="dollar-units"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="irr-current-illustration-report"/>
-
- </fo:page-sequence>
-
- <!-- Current Values Illustration -->
- <!-- Body page -->
- <fo:page-sequence master-reference="current-illustration">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="standardheader">
- <xsl:with-param name="displaycontractlanguage" select="1"/>
- <xsl:with-param name="displaydisclaimer" select="1"/>
- </xsl:call-template>
- <fo:block text-align="center" font-size="9pt" font-family="serif"
padding-top="1em">
- End of Year Policy Values using Current Charges
- <xsl:call-template name="dollar-units"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <xsl:call-template name="current-illustration-report"/>
-
- </fo:page-sequence>
-
- <!-- Explanation and Footnotes page 1 -->
- <fo:page-sequence master-reference="explanation-and-footnotes-1">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="plain-header"/>
- <fo:block font-weight="bold" font-size="11pt"
font-family="sans-serif" text-align="center">
- Explanatory Notes
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <fo:flow flow-name="xsl-region-body">
-
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10pt" font-weight="bold"
text-decoration="underline">
- The Illustration
- </fo:block>
- <fo:block padding-top="1em">
- This illustration is not a policy or an offer or solicitation
- to purchase a policy. Offers are made only through the
- Confidential Private Placement Memorandum ("the PPM") for
- <xsl:value-of select="$scalars/PolicyMktgName"/>.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/ProductDescription"/>
- </fo:block>
- </fo:block>
-
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10pt" font-weight="bold" padding-top="2em"
text-decoration="underline">
- The Policy
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Policy Requirements:</fo:inline>
- This policy is only available to persons who are deemed
- accredited investors and qualified purchasers under applicable
- federal securities laws. The policy owner must be able to bear
- the risk of loss of the entire investment in the policy. The
- policy owner must be familiar with and understand the fundamental
- risks and financial hazards of investing in the policy, and be
- willing to represent as such to
- <xsl:value-of select="$scalars/InsCoShortName"/>.
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Maximum Net Amount at Risk
Limitation: </fo:inline>
- <xsl:value-of select="$scalars/MaxNaarFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Monthly Charges:</fo:inline>
- <xsl:value-of select="$scalars/MonthlyChargesFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Surrender Charges:</fo:inline>
- <xsl:value-of select="$scalars/PremTaxSurrChgFootnote"/>
- </fo:block>
- </fo:block>
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em"
text-decoration="underline">
- Column Definitions
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Account Value:</fo:inline>
- <xsl:value-of select="$scalars/AccountValueFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Administrative Charge:</fo:inline>
- <xsl:value-of select="$scalars/PolicyFeeFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Asset Charges:</fo:inline>
- <xsl:value-of select="$scalars/AssetChargeFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Cash Surrender Value:</fo:inline>
- <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Death Benefit:</fo:inline>
- <xsl:value-of select="$scalars/DeathBenefitFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">End of Year Age:</fo:inline>
- <xsl:value-of select="$scalars/AttainedAgeFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Investment Income:</fo:inline>
- <xsl:value-of select="$scalars/InvestmentIncomeFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">IRR on Death Benefit:</fo:inline>
- <xsl:value-of select="$scalars/IrrDbFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">IRR on Surrender Value:</fo:inline>
- <xsl:value-of select="$scalars/IrrCsvFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Mortality Charges:</fo:inline>
- <xsl:value-of select="$scalars/MortalityChargesFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Policy Year:</fo:inline>
- <xsl:value-of select="$scalars/PolicyYearFootnote"/>
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Premium Loads:</fo:inline>
- The applicable state premium tax, deferred acquisition cost tax
- charge, sales load (if any), separate account administrative
- charge (if any), and other charges incurred as a result of
- retaining an unaffiliated money manager (if any).
- </fo:block>
- <fo:block padding-top="1em">
- <fo:inline font-weight="bold">Premium Outlay:</fo:inline>
- <xsl:value-of select="$scalars/OutlayFootnote"/>
- </fo:block>
- </fo:block>
-
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em"
text-decoration="underline">
- Separate Account
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
- </fo:block>
- </fo:block>
-
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em"
text-decoration="underline">
- Withdrawals and Policy Loans
- </fo:block>
- <fo:block padding-top="1em">
- If applicable, withdrawals and policy loans will appear on a
- supplemental report at the end of the illustration. Withdrawals
- and policy loans are assumed to be taken at the beginning of the
- applicable policy year. The illustration and supplemental report
- reflect a fixed policy loan interest rate of <xsl:value-of
select="$scalars/InitAnnLoanDueRate"/>.
- </fo:block>
- <fo:block padding-top="1em">
- <xsl:value-of select="$scalars/LoanAndWithdrawalFootnote"/>
- </fo:block>
- </fo:block>
- </fo:flow>
-
- </fo:page-sequence>
-
- <!-- Explanation and Footnotes page 2 -->
-
- <fo:page-sequence master-reference="explanation-and-footnotes-2">
-
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="plain-header"/>
- <fo:block font-weight="bold" font-size="11pt"
font-family="sans-serif" text-align="center">
- Explanatory Notes
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <fo:flow flow-name="xsl-region-body">
-
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left">
- <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em"
text-decoration="underline">
- Important Tax Disclosures
- </fo:block>
- <fo:block>
- The definition of life insurance elected for this policy is
- <xsl:choose>
- <xsl:when test="$scalars/DefnLifeIns='GPT'">
- the guideline premium test. The guideline single premium
- is $<xsl:value-of select="$scalars/InitGSP"/>
- and the guideline level premium
- is $<xsl:value-of select="$scalars/InitGLP"/>.
- </xsl:when>
- <xsl:otherwise>
- the cash value accumulation test.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block padding-top="1em">
- The initial 7-pay premium limit
- is $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
- As illustrated, this policy
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- fails
- </xsl:when>
- <xsl:otherwise>
- passes
- </xsl:otherwise>
- </xsl:choose>
- the seven-pay test defined in Section 7702A
- of the Internal Revenue Code and therefore
- <xsl:choose>
- <xsl:when test="$scalars/IsMec='1'">
- becomes a Modified Endowment Contract (MEC)
- in policy year <xsl:value-of select="$scalars/MecYear+1"/>.
- </xsl:when>
- <xsl:otherwise>
- is not a Modified Endowment Contract (MEC). Subsequent
changes
- to the policy, including but not limited to increases
- and decreases in premiums or benefits, may cause the policy
- to be retested and may result in the policy becoming a MEC.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block padding-top="1em">
- If a policy is a MEC, withdrawals and policy loans are taxed to
- the extent of any gain in the policy, and an additional penalty
- tax may apply to the taxable portion of the distribution.
- </fo:block>
- <fo:block font-weight="bold" padding-top="1em">
- The information provided in this illustration is not written or
- intended as tax or legal advice and may not be relied on for
- purposes of avoiding any federal tax penalties.
- <xsl:value-of select="$scalars/InsCoShortName"/>, its employees
- and representatives are not authorized to give tax or legal
advice.
- Individuals are encouraged to seek advice from their own tax or
- legal counsel.
- </fo:block>
- </fo:block>
-
- <!-- Certification Statements -->
- <xsl:if test="$scalars/IsInforce!='1'">
- <fo:block font-weight="bold" font-size="11pt"
font-family="sans-serif" text-align="center" padding-top="2em">
- Certification Statements
- </fo:block>
- <fo:block font-weight="normal" font-size="9pt"
font-family="sans-serif" text-align="left" padding-top="1em">
- <fo:block padding-top="1em">
- POLICY OWNER / APPLICANT
- </fo:block>
- <fo:block padding-bottom="1em">
- I have received a copy of this illustration, and I understand
- that any non-guaranteed charges illustrated are subject
- to change and could be either higher or lower. Additionally,
- I have been informed by my agent that these values
- are not guaranteed.
- </fo:block>
- <fo:block text-decoration="overline" padding="2em">
- POLICY OWNER OR APPLICANT SIGNATURE
- <fo:inline
text-decoration="no-overline"> </fo:inline>DATE
-
- </fo:block>
- <fo:block padding-top="2em">
- AGENT / AUTHORIZED REPRESENTATIVE
- </fo:block>
- <fo:block padding-bottom="1em">
- I certify that this illustration has been presented
- to the applicant, and that I have explained that any
- non-guaranteed charges illustrated are subject to change. I
have
- made no statements that are inconsistent with the illustration.
- </fo:block>
- <fo:block text-decoration="overline" padding="2em">
- AGENT OR AUTHORIZED REPRESENTATIVE
-
- <fo:inline
text-decoration="no-overline"> </fo:inline>DATE
-
- </fo:block>
- </fo:block>
- </xsl:if>
- <xsl:if test="not($has_supplemental_report)">
- <fo:block id="endofdoc"/>
- </xsl:if>
- </fo:flow>
- </fo:page-sequence>
-
- <!-- Supplemental Illustration -->
- <!-- Body page -->
- <xsl:if test="$has_supplemental_report">
- <fo:page-sequence master-reference="supplemental-report">
-
- <!-- Define the contents of the header. -->
- <fo:static-content flow-name="xsl-region-before">
- <xsl:call-template name="standardheader">
- <xsl:with-param name="displaycontractlanguage" select="1"/>
- <xsl:with-param name="displaydisclaimer" select="1"/>
- </xsl:call-template>
- <fo:block text-align="center" font-size="9pt" font-family="serif"
padding-top="1em">
- <xsl:value-of select="illustration/supplementalreport/title"/>
- <xsl:call-template name="dollar-units"/>
- </fo:block>
- </fo:static-content>
-
- <!-- Define the contents of the footer. -->
- <xsl:call-template name="standardfooter"/>
-
- <!-- Supplemental report body -->
- <xsl:call-template name="supplemental-report-body"/>
- </fo:page-sequence>
- </xsl:if>
- </fo:root>
- </xsl:template>
-
- <xsl:template name="standardheader">
- <xsl:param name="displaycontractlanguage"/>
- <xsl:param name="displaydisclaimer"/>
- <xsl:param name="logo_only"/>
- <fo:block padding-after="2.5pt">
- <fo:table table-layout="fixed" width="100%" font-weight="bold"
font-size="13.0pt" font-family="sans-serif">
- <fo:table-column column-width="50mm"/>
- <fo:table-column column-width="90mm"/>
- <fo:table-column column-width="50mm"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell>
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- <fo:block text-align="center" font-size="9pt">
- <xsl:if test="$displaycontractlanguage=1">
- <fo:block padding-top="1em">
- <xsl:choose>
- <xsl:when test="$scalars/IsInforce!='1'">
- Illustration for Flexible Premium Variable Adjustable
- Life Insurance Contract.
- </xsl:when>
- <xsl:otherwise>
- In Force Illustration for Flexible Premium Variable Adjustable
- Life Insurance Contract.
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:if>
- <xsl:if test="$displaydisclaimer=1">
- <fo:block padding-top="1em">
- The purpose of the Illustration is to show how the performance of the
- underlying separate account divisions could affect the policy's
- account values and death benefits. This Illustration is hypothetical
- and may not be used to project or predict investment results.
- </fo:block>
- </xsl:if>
- </fo:block>
-
- <fo:block padding-top="1em">
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column column-width="125mm"/>
- <fo:table-column column-width="proportional-column-width(1)"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell padding-right="2mm">
- <fo:block text-align="left" font-size="9pt">
- <fo:block>
- Date Prepared: <xsl:call-template name="date-prepared"/>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="$is_composite">
- Composite of individuals
- </xsl:when>
- <xsl:otherwise>
- Prepared for:
- <xsl:call-template name="limitstring">
- <xsl:with-param name="passString"
select="$scalars/Insured1"/>
- <xsl:with-param name="length" select="30"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <xsl:if test="not($is_composite)">
- <fo:block>
- Age: <xsl:value-of select="$scalars/Age"/>
- </fo:block>
- </xsl:if>
- <xsl:if test="not($is_composite)">
- <fo:block>
- Issue State: <xsl:value-of
select="$scalars/StatePostalAbbrev"/>
- </fo:block>
- </xsl:if>
- <fo:block>
- Selected Face Amount:
- $<xsl:value-of select="$scalars/InitTotalSA"/>
- </fo:block>
- <fo:block>
- Initial Death Benefit Option:
- <xsl:value-of select="$scalars/InitDBOpt"/>
- </fo:block>
- </fo:block>
- </fo:table-cell>
-
- <fo:table-cell>
- <fo:block text-align="left" font-size="9pt">
- <fo:block>
- Policy: <xsl:value-of select="$scalars/PolicyMktgName"/>
- </fo:block>
- <fo:block/>
- <xsl:if test="not($is_composite)">
- <fo:block>
- Underwriting Type:
- <xsl:choose>
- <xsl:when test="$scalars/UWType='Medical'">
- Fully underwritten
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$scalars/UWType"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- <fo:block>
- Rate Classification: <xsl:value-of
select="$scalars/Gender"/>,
- <xsl:value-of select="$scalars/Smoker"/>,
- <xsl:value-of select="$scalars/UWClass"/>
- </fo:block>
- <xsl:if test="$scalars/UWClass='Rated'">
- <fo:block padding-left="3em">
- <fo:block>
- Table Rating:
- <xsl:value-of select="$scalars/SubstandardTable"/>
- </fo:block>
- <!-- Flats don't require "Rated" class; and does this
value actually print anyway?
- These questions apply as well to the original:
-
http://svn.savannah.nongnu.org/viewvc/lmi/trunk/individual_private_placement.xsl?annotate=696&root=lmi&pathrev=3585
- -->
- <fo:block>
- Initial Annual Flat Extra:
- <xsl:value-of
select="address@hidden'AnnualFlatExtra']/duration[1]/@column_value"/>
- per 1,000
- </fo:block>
- </fo:block>
- </xsl:if>
- </xsl:if>
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
-
- <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
- <xsl:call-template name="print-mastercontractnumber-and-contractnumber"/>
- </fo:block>
- </xsl:template>
-
- <xsl:template name="plain-header">
- <xsl:param name="logo_only"/>
- <fo:block padding-after="2.5pt">
- <fo:table table-layout="fixed" width="100%" font-weight="bold"
font-size="13.0pt" font-family="sans-serif">
- <fo:table-column column-width="50mm"/>
- <fo:table-column column-width="90mm"/>
- <fo:table-column column-width="50mm"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell>
- <fo:block text-align="left">
- <xsl:call-template name="company-logo"/>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block/>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </xsl:template>
-
- <xsl:template name="irr-guaranteed-illustration-report">
- <xsl:variable name="irr_guaranteed_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="1"/>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column name="CSVNet_GuaranteedZero">Cash _Surr Value</column>
- <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
- <column name="IrrCsv_GuaranteedZero">IRR on _Surr Value</column>
- <column name="IrrDb_GuaranteedZero">IRR on _Death Bft</column>
- <column/>
- <column name="CSVNet_Guaranteed">Cash _Surr Value</column>
- <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
- <column name="IrrCsv_Guaranteed">IRR on _Surr Value</column>
- <column name="IrrDb_Guaranteed">IRR on _Death Bft</column>
- </xsl:variable>
- <xsl:variable name="columns_raw"
select="document('')//xsl:address@hidden'irr_guaranteed_illustration_columns_raw']/column"/>
- <xsl:variable name="columns" select="$columns_raw[not(@composite)] |
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <!-- Custom part of the table header -->
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
- Hypothetical Rate of Return*
- </fo:block>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
- Hypothetical Rate of Return*
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
-
- <!-- Generic part of the table header -->
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="irr-current-illustration-report">
- <xsl:variable name="irr_current_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="1"/>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column name="CSVNet_CurrentZero">Cash _Surr Value</column>
- <column name="EOYDeathBft_CurrentZero">Death _ Benefit</column>
- <column name="IrrCsv_CurrentZero">IRR on _Surr Value</column>
- <column name="IrrDb_CurrentZero">IRR on _Death Bft</column>
- <column/>
- <column name="CSVNet_Current">Cash _Surr Value</column>
- <column name="EOYDeathBft_Current">Death _Benefit</column>
- <column name="IrrCsv_Current">IRR on _Surr Value</column>
- <column name="IrrDb_Current">IRR on _Death Bft</column>
- </xsl:variable>
- <xsl:variable name="columns_raw"
select="document('')//xsl:address@hidden'irr_current_illustration_columns_raw']/column"/>
- <xsl:variable name="columns" select="$columns_raw[not(@composite)] |
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <!-- Custom part of the table header -->
- <fo:table-row>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
- Hypothetical Rate of Return*
- </fo:block>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="3">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell number-columns-spanned="2">
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
- Hypothetical Rate of Return*
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
-
- <!-- Generic part of the table header -->
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="current-illustration-report">
- <xsl:variable name="current_illustration_columns_raw">
- <column name="PolicyYear">Policy _Year</column>
- <column composite="1"/>
- <column composite="0" name="AttainedAge">End of _Year Age</column>
- <column name="GrossPmt">Premium _Outlay</column>
- <column special="Premium_Loads">Premium _Loads</column>
- <column special="Admin_Charges">Admin _Charges</column>
- <column name="COICharge_Current">Mortality _Charges</column>
- <column name="SepAcctCharges_Current">Asset _Charges</column>
- <column name="GrossIntCredited_Current">Investment _Income</column>
- <column name="AcctVal_Current">Account _Value</column>
- <column name="CSVNet_Current">Cash _Surr Value</column>
- <column name="EOYDeathBft_Current">Death_ Benefit</column>
- </xsl:variable>
- <xsl:variable name="columns_raw"
select="document('')//xsl:address@hidden'current_illustration_columns_raw']/column"/>
- <xsl:variable name="columns" select="$columns_raw[not(@composite)] |
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
- <!-- The main contents of the body page -->
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="9pt" font-family="serif">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="generate-table-columns">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
-
- <fo:table-header>
- <!-- Custom part of the table header -->
- <fo:table-row>
- <fo:table-cell number-columns-spanned="7">
- <fo:block/>
- </fo:table-cell>
- <fo:table-cell>
- <xsl:attribute name="number-columns-spanned">
- <!-- generate-table-columns adds one extra column and
- 7 columns are taken by the table-cell above: -->
- <xsl:value-of select="count($columns) - 7 + 1"/>
- </xsl:attribute>
- <xsl:call-template name="header-cell-with-border"/>
- <fo:block text-align="center">
- <xsl:value-of
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
- Hypothetical Rate of Return*
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
-
- <!-- Generic part of the table header -->
- <xsl:call-template name="generate-table-headers">
- <xsl:with-param name="columns" select="$columns"/>
- </xsl:call-template>
- </fo:table-header>
-
- <fo:table-body>
- <xsl:call-template name="generate-table-values">
- <xsl:with-param name="columns" select="$columns"/>
- <xsl:with-param name="counter" select="$scalars/InforceYear +
1"/>
- <xsl:with-param name="max-counter" select="$max-lapse-year"/>
- <xsl:with-param name="inforceyear" select="0 -
$scalars/InforceYear"/>
- </xsl:call-template>
- </fo:table-body>
- </fo:table>
- </fo:block>
- </fo:flow>
- </xsl:template>
-
- <xsl:template name="get-special-column-value">
- <xsl:param name="special"/>
- <xsl:param name="column"/>
- <xsl:param name="counter"/>
- <xsl:param name="special-param"/>
- <xsl:choose>
- <xsl:when test="$special='Premium_Loads'">
- <xsl:variable name="GrossPmt"
select="address@hidden'GrossPmt']/duration[$counter]/@column_value"/>
- <xsl:variable name="NetPmt_Current"
select="address@hidden'NetPmt_Current']/duration[$counter]/@column_value"/>
- <xsl:value-of
select="format-number(translate($GrossPmt,$numberswc,$numberswoc) -
translate($NetPmt_Current,$numberswc,$numberswoc),'###,###,###')"/>
- </xsl:when>
- <xsl:when test="$special='Admin_Charges'">
- <xsl:variable name="SpecAmtLoad_Current"
select="address@hidden'SpecAmtLoad_Current']/duration[$counter]/@column_value"/>
- <xsl:variable name="PolicyFee_Current"
select="address@hidden'PolicyFee_Current']/duration[$counter]/@column_value"/>
- <xsl:value-of
select="format-number(translate($SpecAmtLoad_Current,$numberswc,$numberswoc) +
translate($PolicyFee_Current,$numberswc,$numberswoc),'###,###,###')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="ERROR_Unknown_Special_Column_Name_Specified"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="standardfooter">
- <xsl:param name="omit-pagenumber" select="boolean(0)"/>
- <xsl:param name="omit-disclaimer" select="boolean(0)"/>
- <xsl:call-template name="generic-footer">
- <xsl:with-param name="top-block">
- <fo:block>
- This illustration is not complete unless all pages as noted
- below are included.
- </fo:block>
- </xsl:with-param>
- <xsl:with-param name="left-block">
- <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
- <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
- </xsl:with-param>
- <xsl:with-param name="center-block">
- <xsl:if test="$scalars/LmiVersion!=''">
- <fo:block>
- System Version:
- <xsl:value-of select="$scalars/LmiVersion"/>
- </fo:block>
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="right-block">
- <fo:block>
- Policy Form:
- <xsl:value-of select="$scalars/PolicyForm"/>
- </fo:block>
- <fo:block>
- <xsl:choose>
- <xsl:when test="not($omit-pagenumber)">
- <xsl:call-template name="page-of"/>
- </xsl:when>
- <xsl:otherwise>
- Attachment
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:template>
-
-</xsl:stylesheet>