[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 727f84a 1/2: Make copies of input-file schema
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 727f84a 1/2: Make copies of input-file schemata |
Date: |
Thu, 28 Jun 2018 16:58:48 -0400 (EDT) |
branch: master
commit 727f84a8c2f277c5771522268703fa1a2550e8f3
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Make copies of input-file schemata
In preparation for establishing a new input version, copied all current
schemata, adding numeric version suffixes. (The current version of each
input file is validated with an unsuffixed schema; old versions, with a
version-suffixed schema.) At this moment, the following invariant holds:
for z in \
cell_08 multiple_cell_document_02 \
single_cell_document_02 types_08 \
; do cmp $z.rnc ${z%_0*}.rnc; cmp $z.xsd ${z%_0*}.xsd
; done
although soon it won't.
Updated the schema-test script accordingly.
---
cell_08.rnc | 554 ++++++++++++++++
cell_08.xsd | 1440 +++++++++++++++++++++++++++++++++++++++++
multiple_cell_document_02.rnc | 42 ++
multiple_cell_document_02.xsd | 74 +++
single_cell_document_02.rnc | 32 +
single_cell_document_02.xsd | 43 ++
test_schemata.sh | 2 +
types_08.rnc | 384 +++++++++++
types_08.xsd | 821 +++++++++++++++++++++++
9 files changed, 3392 insertions(+)
diff --git a/cell_08.rnc b/cell_08.rnc
new file mode 100644
index 0000000..85bddcd
--- /dev/null
+++ b/cell_08.rnc
@@ -0,0 +1,554 @@
+# RELAX NG schema for a single cell (class Input).
+#
+# Copyright (C) 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
+
+# This schema is meant not for standalone use, but rather for
+# inclusion from other schemata.
+
+# Inforce data from external systems should use default values for
+# elements marked with an asterisk.
+
+cell_element = element cell
+ {attribute version {"8"}
+
+ ,## Accidental death benefit: elected or not.
+ element AccidentalDeathBenefit {yes_or_no}
+ ,## Insured's address: number and street.
+ element Address {text}
+ ,## Agent's address: number and street.
+ element AgentAddress {text}
+ ,## Agent's address: city.
+ element AgentCity {text}
+ ,## Agent ID code.
+ element AgentId {text}
+ ,## Agent's full name.
+ element AgentName {text}
+ ,## Agent's phone number.
+ element AgentPhone {text}
+ ,## Agent's address: state.
+ element AgentState {state}
+ ,## Agent's address: zip code.
+ element AgentZipCode {text}
+ ,## * Amortize premium load (occasionally used for BOLI).
+ element AmortizePremiumLoad {yes_or_no}
+ ,## * Special logic, if any, to avoid a MEC.
+ element AvoidMecMethod {mec_avoid_method}
+ ,## Custom-blend rates by gender.
+ element BlendGender {yes_or_no}
+ ,## Custom-blend rates by smoking.
+ element BlendSmoking {yes_or_no}
+ ,## Negative surrender charge as proportion of total account
+ ## value. Default: '0'.
+ element CashValueEnhancementRate {numeric_sequence}
+ ,## Child(ren) term rider: elected or not.
+ element ChildRider {yes_or_no}
+ ,## Child(ren) term rider: face amount.
+ element ChildRiderAmount {nonnegative_double}
+ ,## Insured's address: city.
+ element City {text}
+ ,## * Free-form comments.
+ element Comments {text}
+ ,## Contract number: a unique identifier, which, although usually
+ ## called a "number", is often not purely numeric.
+ element ContractNumber {text}
+ ,## Corporation's address: number and street.
+ element CorporationAddress {text}
+ ,## Corporation's address: city.
+ element CorporationCity {text}
+ ,## Corporation's name.
+ element CorporationName {text}
+ ,## Corporation's planned premium. Default: '0'.
+ element CorporationPayment {payment_sequence}
+ ,## Corporation's premium mode. Default: 'annual'.
+ element CorporationPaymentMode {mode_sequence}
+ ,## * Corporation's tabular-premium multiplier. Default: '1'.
+ element CorporationPremiumTableFactor {nonnegative_double}
+ ,## Corporation's address: state.
+ element CorporationState {state}
+ ,## * Corporation's tax bracket. Default: '0'.
+ element CorporationTaxBracket {numeric_sequence}
+ ,## Corporation's address: zip code.
+ element CorporationZipCode {text}
+ ,## Insured's address: country. Default: 'US'.
+ element Country {country}
+ ,## COI multiplier for country. Default: '1'.
+ element CountryCoiMultiplier {nonnegative_double}
+ ,## * User-designed supplemental illustration: elected or not.
+ element CreateSupplementalReport {yes_or_no}
+ ,## Multiplier for current COI rates. Default: '1'.
+ element CurrentCoiMultiplier {numeric_sequence}
+ ,## Insured's date of birth.
+ element DateOfBirth {calendar_date_int}
+ ,## Death benefit option. Default: 'a'.
+ element DeathBenefitOption {dbo_sequence}
+ ,## * [obsolete]
+ element DeathBenefitOptionFromIssue {dbopt}?
+ ,## * [obsolete]
+ element DeathBenefitOptionFromRetirement {dbopt}?
+ ,## 7702 definitional test.
+ element DefinitionOfLifeInsurance {defn_life_ins}
+ ,## * 7702A definition of material change. Default:
+ ## 'GPT adjustment event' if GPT; else 'Unnecessary premium'.
+ element DefinitionOfMaterialChange {defn_material_change}
+ ,## * Dump-in: i.e., first-year-only extra premium other than a 1035
exchange.
+ element Dumpin {nonnegative_double}
+ ,## Effective date: for UL, date of first monthly deduction.
+ element EffectiveDate {calendar_date_int}
+ ,## * Use today's date as effective date: handy for new business.
+ element EffectiveDateToday {yes_or_no}
+ ,## * Employee class, used for grouping individuals in order to
+ ## make input easier. E.g., specified amount for 'partners' might
+ ## be two times salary, while 'all others' get a flat $50K.
+ element EmployeeClass {text}
+ ,## Factor for amortizing mortality profit into future charges.
+ ## Default: '1'.
+ element ExperienceRatingInitialKFactor {nonnegative_double}
+ ,## Overridden reserve rate for experience rating.
+ element ExperienceReserveRate {proportion_double}
+ ,## * Amount of 1035 exchange from a different insurer.
+ element External1035ExchangeAmount {nonnegative_double}
+ ,## * MEC status of 1035 exchange from a different insurer.
+ element External1035ExchangeFromMec {yes_or_no}
+ ,## * Tax basis of 1035 exchange from a different insurer.
+ element External1035ExchangeTaxBasis {xsd:double}
+ ,## Extra charge on separate-account assets. The motivation is to
+ ## let end users add a negotiated asset trailer without changing
+ ## the product database, but the field may be used for any extra
+ ## charge in the nature of M&E. Default: '0'.
+ element ExtraCompensationOnAssets {numeric_sequence}
+ ,## Extra premium load. The motivation is to let end users add a
+ ## negotiated commission without changing the product database,
+ ## but the field may be used for any extra load on premium.
+ ## Default: '0'.
+ element ExtraCompensationOnPremium {numeric_sequence}
+ ,## Extra policy fee. The motivation is to let end users add an
+ ## additional monthly custodial fee for a custom fund, but the
+ ## field may be used for any extra monthly fee. Default: '0'.
+ element ExtraMonthlyCustodialFee {numeric_sequence}
+ ,## Annual flat extra per thousand of specified amount. Default: '0'.
+ element FlatExtra {numeric_sequence}
+ ,## * As yet unused.
+ element FundAllocations {text}
+ ,## * Fund-allocation override.
+ element FundChoiceType {fund_input_method}
+ ,## Insured's gender for insurance purposes.
+ element Gender {gender}
+ ,## General-account interest rate as a decimal: e.g., '.03' for
+ ## 3%. Default: actual credited rate; '0' for products with no
+ ## general-account option.
+ element GeneralAccountRate {numeric_sequence}
+ ,## * General-account rate: before or after spread.
+ element GeneralAccountRateType {gen_acct_rate_type}
+ ,## Type of underwriting, e.g. guaranteed issue.
+ element GroupUnderwritingType {uw_basis}
+ ,## Honeymoon: elected or not. This is a temporary secondary
+ ## guarantee that enhances surrender values in early years, by
+ ## setting a minimum CSV equal to gross premium accumulated at a
+ ## special interest rate, with no monthly deductions taken.
+ element HoneymoonEndorsement {yes_or_no}
+ ,## Interest spread for honeymoon value, which grows at the net
+ ## general account rate less this decrement. Default: '0'.
+ element HoneymoonValueSpread {numeric_sequence}
+ ,## * Include this life in composite: permits excluding certain
+ ## lives from a composite without deleting them from a census.
+ ## Default: 'Yes'.
+ element IncludeInComposite {yes_or_no}
+ ,## * [obsolete]
+ element IndividualPaymentAmount {nonnegative_double}?
+ ,## * [obsolete]
+ element IndividualPaymentMode {mode}?
+ ,## * [obsolete]
+ element IndividualPaymentStrategy {pmt_strategy}
+ ,## * [obsolete]
+ element IndividualPaymentToAge {age_int}?
+ ,## * [obsolete]
+ element IndividualPaymentToAlternative {to_point}?
+ ,## * [obsolete]
+ element IndividualPaymentToDuration {duration_int}?
+ ,## 7702A "amounts paid" for each "contract year" since beginning
+ ## of most recent seven-pay period. Default: '0' if not in a
+ ## seven-pay period.
+ element Inforce7702AAmountsPaidHistory {numeric_sequence}
+ ,## Inforce annual target premium.
+ element InforceAnnualTargetPremium {nonnegative_double}
+ ,## Date as of which inforce values are provided. This is taken to
+ ## refer to the first moment of the day, before monthiversary
+ ## processing. Some admin systems find it more convenient to
+ ## provide values as of the last moment of the preceding day; in
+ ## that case, this field should indicate the day following that
+ ## preceding day, i.e., the day monthiversary processing occurs.
+ element InforceAsOfDate {calendar_date_int}
+ ,## Inforce account value before last material change, for 7702A.
+ element InforceAvBeforeLastMc {nonnegative_double}
+ ,## * [obsolete]
+ element InforceContractMonth {month_int}
+ ,## * [obsolete]
+ element InforceContractYear {duration_int}
+ ,## Corporation's inforce stake in a benefit plan (e.g., amount of
+ ## a full split-dollar rollout): cumulative corporation payments,
+ ## plus accumulated interest if interest not paid in cash.
+ element InforceCorporationStake {nonnegative_double}
+ ,## Inforce cumulative 7702 guideline level premium.
+ element InforceCumulativeGlp {xsd:double}
+ ,## Inforce cumulative 7702(f)(1) 'premiums paid'.
+ element InforceCumulativeGptPremiumsPaid {xsd:double}
+ ,## Inforce cumulative payments for no-lapse guarantee: sum of all
+ ## gross premiums, including dump-ins and 1035 exchange proceeds,
+ ## minus rider charges, withdrawals, and premiums refunded or
+ ## forced out.
+ element InforceCumulativeNoLapsePayments {nonnegative_double}
+ ,## Inforce cumulative no-lapse premium, for contracts that offer
+ ## a no-lapse guarantee as long as a cumulative minimum premium
+ ## is paid.
+ element InforceCumulativeNoLapsePremium {nonnegative_double}
+ ,## Inforce cumulative payments for return of premium death
+ ## benefit option and for loads banded by cumulative premium:
+ ## sum of all gross premiums, including dump-ins and 1035
+ ## exchange proceeds, minus withdrawals and premiums refunded
+ ## or forced out.
+ element InforceCumulativeRopPayments {nonnegative_double}
+ ,## Inforce cumulative refundable sales load.
+ element InforceCumulativeSalesLoad {nonnegative_double}
+ ,## Vendor identifier for files from an external system.
+ element InforceDataSource {xsd:nonNegativeInteger}
+ ,## Inforce 7702A deemed cash value.
+ element InforceDcv {nonnegative_double}
+ ,## Inforce unloaned account value in the general account.
+ element InforceGeneralAccountValue {nonnegative_double}
+ ,## Inforce 7702 guideline level premium.
+ element InforceGlp {xsd:double}
+ ,## Inforce 7702 guideline single premium.
+ element InforceGsp {xsd:double}
+ ,## Inforce honeymoon value. Zero if honeymoon has expired or
+ ## was never present.
+ element InforceHoneymoonValue {nonnegative_double}
+ ,## MEC status of inforce contract.
+ element InforceIsMec {yes_or_no}
+ ,## Inforce 7702A least death benefit.
+ element InforceLeastDeathBenefit {nonnegative_double}
+ ,## * [obsolete]
+ element InforceMonth {month_int}
+ ,## Monthly premium required to maintain no-lapse guarantee.
+ element InforceMonthlyNoLapsePremium {nonnegative_double}
+ ,## Inforce net reserve for experience rating.
+ element InforceNetExperienceReserve {xsd:double}
+ ,## No-lapse guarantee is in effect.
+ element InforceNoLapseActive {yes_or_no}
+ ,## Inforce balance (total indebtedness) for preferred loans:
+ ## the amount that must be repaid to liquidate the loan.
+ element InforcePreferredLoanBalance {nonnegative_double}
+ ,## Inforce loaned account value for preferred loans, including
+ ## principal and interest credited, but excluding interest
+ ## accrued: the portion of account value held in the loan
+ ## division of the general account with respect to the loan.
+ element InforcePreferredLoanValue {nonnegative_double}
+ ,## Inforce balance (total indebtedness) for regular loans:
+ ## the amount that must be repaid to liquidate the loan.
+ element InforceRegularLoanBalance {nonnegative_double}
+ ,## Inforce loaned account value for regular loans, including
+ ## principal and interest credited, but excluding interest
+ ## accrued: the portion of account value held in the loan
+ ## division of the general account with respect to the loan.
+ element InforceRegularLoanValue {nonnegative_double}
+ ,## Inforce account value in all separate accounts, combined.
+ element InforceSeparateAccountValue {nonnegative_double}
+ ,## Inforce 7702A seven-pay premium.
+ element InforceSevenPayPremium {nonnegative_double}
+ ,## Amount on which specified-amount load is charged, with due
+ ## regard to term rider and corridor.
+ element InforceSpecAmtLoadBase {nonnegative_double}
+ ,## Inforce tax basis.
+ element InforceTaxBasis {xsd:double}
+ ,## * [obsolete]
+ element InforceYear {duration_int}
+ ,## Policy-year-to-date payments counted toward target premium.
+ element InforceYtdGrossPremium {nonnegative_double}
+ ,## Policy-year-to-date "net" COI charge for experience rating.
+ element InforceYtdNetCoiCharge {nonnegative_double}
+ ,## Policy-year-to-date payments subject to premium tax.
+ element InforceYtdTaxablePremium {nonnegative_double}
+ ,## * Investment management fee of a custom fund.
+ element InputFundManagementFee {nonnegative_double}
+ ,## Insured's full name.
+ element InsuredName {text}
+ ,## * Insured's tabular-premium multiplier. Default: '1'.
+ element InsuredPremiumTableFactor {nonnegative_double}
+ ,## * Amount of 1035 exchange from the same insurer; distinguished
+ ## from external 1035 because an internal exchange may not be
+ ## subject to premium tax.
+ element Internal1035ExchangeAmount {nonnegative_double}
+ ,## * MEC status of 1035 exchange from the same insurer.
+ element Internal1035ExchangeFromMec {yes_or_no}
+ ,## * Tax basis of 1035 exchange from the same insurer.
+ element Internal1035ExchangeTaxBasis {xsd:double}
+ ,## Insurance age on effective date.
+ element IssueAge {age_int}
+ ,## Most recent group-underwriting date, for group contracts that
+ ## reenter a select and ultimate table of COI rates periodically
+ ## upon successful re-underwriting (for active lives only).
+ ## Default: effective date, for contracts with no reentry.
+ element LastCoiReentryDate {calendar_date_int}
+ ,## Date of most recent 7702A material change. Default: effective
+ ## date, for contracts that have never had a material change.
+ element LastMaterialChangeDate {calendar_date_int}
+ ,## Date of a list bill generated by the illustration system.
+ ## Default: the value of 'InforceAsOfDate'.
+ element ListBillDate {calendar_date_int}?
+ ,## * [obsolete]
+ element LoanAmount {nonnegative_double}?
+ ,## * [obsolete]
+ element LoanFromAge {age_int}?
+ ,## * [obsolete]
+ element LoanFromAlternative {from_point}?
+ ,## * [obsolete]
+ element LoanFromDuration {duration_int}?
+ ,## Loan interest rate, if it is variable. Default: '0' otherwise.
+ element LoanRate {proportion_double}
+ ,## Loan rate: fixed or variable.
+ element LoanRateType {loan_rate_type}
+ ,## * [obsolete]
+ element LoanToAge {age_int}?
+ ,## * [obsolete]
+ element LoanToAlternative {to_point}?
+ ,## * [obsolete]
+ element LoanToDuration {duration_int}?
+ ,## Proportion of males when rates are custom-blended by gender.
+ ## Default: '0' otherwise.
+ element MaleProportion {proportion_double}
+ ,## Group master contract number.
+ element MasterContractNumber {text}
+ ,## Maximum net amount at risk, as constrained by reinsurance.
+ ## Some contracts in the high-net-worth market force money out to
+ ## prevent corridor death benefit from exceeding available
+ ## reinsurance. Default: '1000000000'.
+ element MaximumNaar {nonnegative_double}
+ ,## * New loan taken in cash (excluding capitalized interest).
+ ## Default: '0'.
+ element NewLoan {numeric_sequence}
+ ,## Proportion of nonsmokers when rates are custom-blended by
+ ## smoking. Default: '0' otherwise.
+ element NonsmokerProportion {proportion_double}
+ ,## * Number of identical lives represented by a single census
+ ## cell. It is sometimes convenient to approximate a population
+ ## by specifying a few cells and indicating the number of lives
+ ## each one represents. Default: '1'.
+ element NumberOfIdenticalLives {xsd:nonNegativeInteger}
+ ,## * Override country COI multiplier. Default: 'Yes'.
+ element OverrideCoiMultiplier {yes_or_no}
+ ,## Override reserve rate for experience rating. Default: 'Yes'.
+ element OverrideExperienceReserveRate {yes_or_no}
+ ,## * Override investment management fee: used only with custom funds.
+ element OverrideFundManagementFee {yes_or_no}
+ ,## * Multiplier applied to partial-mortality table. Default: '1'.
+ element PartialMortalityMultiplier {numeric_sequence}
+ ,## Insured's planned premium. Default: '0'.
+ element Payment {payment_sequence}
+ ,## Insured's premium mode. Default: 'annual'.
+ element PaymentMode {mode_sequence}
+ ,## Interest decrement applied to crediting rate after the
+ ## honeymoon expires--designed to recover the cost of providing
+ ## the honeymoon.
+ element PostHoneymoonSpread {proportion_double}
+ ,## State to which premium tax is paid.
+ element PremiumTaxState {state}
+ ,## Product (plan): enumerators depend on run-time context.
+ element ProductName {text}
+ ,## * Projected salary: used for salary-based benefits. Default: '0'.
+ element ProjectedSalary {numeric_sequence}
+ ,## * Retirees allowed to enroll (or not). This is handy for
+ ## warning when retirees are unintentionally included in a
+ ## census. Default: 'Yes'.
+ element RetireesCanEnroll {yes_or_no}
+ ,## * Insured's retirement age. Default: '65'.
+ element RetirementAge {age_int}
+ ,## * Order in which different individuals in a census are
+ ## processed.
+ element RunOrder {run_order}
+ ,## * Maximum salary-based specified amount. Default: '100000'.
+ element SalarySpecifiedAmountCap {nonnegative_double}
+ ,## * Salary multiple used to determine specified amount. Default: '1'.
+ element SalarySpecifiedAmountFactor {nonnegative_double}
+ ,## * Amount to be subtracted from salary-based specified amount,
+ ## intended to represent basic group term coverage. Default: '50000'.
+ element SalarySpecifiedAmountOffset {nonnegative_double}
+ ,## * Separate-account hypothetical rate as a decimal: e.g.,
+ ## '.0654' for 6.54%. Default: '.08'.
+ element SeparateAccountRate {numeric_sequence}
+ ,## * Separate-account rate: before or after spread. Default: 'Gross rate'.
+ element SeparateAccountRateType {sep_acct_rate_type}
+ ,## Insured's smoking or tobacco use.
+ element Smoking {smoking}
+ ,## * Age at which a solve begins (inclusive).
+ element SolveBeginTime {duration_int}
+ ,## * Policy year in which a solve begins (inclusive).
+ element SolveBeginYear {duration_int}
+ ,## * Age at which a solve ends (exclusive).
+ element SolveEndTime {duration_int}
+ ,## * Policy year at which a solve ends (exclusive).
+ element SolveEndYear {duration_int}
+ ,## * Expense and general-account basis for a solve: lmi permits
+ ## solves on guaranteed and midpoint bases as well as current.
+ element SolveExpenseGeneralAccountBasis {gen_basis}
+ ,## * Point at which a solve begins.
+ element SolveFromWhich {from_point}
+ ,## * Separate-account basis for a solve: lmi permits solves on
+ ## the basis of the hypothetical rate, half that rate, or zero.
+ element SolveSeparateAccountBasis {sep_basis}
+ ,## * Solve goal.
+ element SolveTarget {solve_target}
+ ,## * Cash surrender value used as solve goal.
+ element SolveTargetCashSurrenderValue {nonnegative_double}
+ ,## * Age at which a solve target is to be achieved.
+ element SolveTargetTime {duration_int}
+ ,## * Policy year in which a solve target is to be achieved.
+ element SolveTargetYear {duration_int}
+ ,## * Point at which a solve target is to be achieved.
+ element SolveTgtAtWhich {to_point}
+ ,## * Point at which a solve ends.
+ element SolveToWhich {to_point}
+ ,## * Parameter to be solved for.
+ element SolveType {solve_type}
+ ,## Specified amount for each policy year since issue. Inforce
+ ## extracts require only the current scalar value. Default: '0'.
+ element SpecifiedAmount {specamt_sequence}
+ ,## * [obsolete]
+ element SpecifiedAmountFromIssue {nonnegative_double}?
+ ,## * [obsolete]
+ element SpecifiedAmountFromRetirement {nonnegative_double}?
+ ,## * [obsolete]
+ element SpecifiedAmountStrategyFromIssue {sa_strategy}
+ ,## * Accumulate interest at demand-loan rate for split dollar,
+ ## rather than paying it in cash.
+ element SplitDollarAccumulateInterest {yes_or_no}
+ ,## * Split-dollar annual demand-loan rate (typically the AFR).
+ element SplitDollarLoanRate {numeric_sequence}
+ ,## * Split-dollar rollout age.
+ element SplitDollarRolloutAge {duration_int}
+ ,## * Point at which split-dollar rollout is planned.
+ element SplitDollarRolloutAtWhich {to_point}
+ ,## * Split-dollar rollout duration.
+ element SplitDollarRolloutYear {duration_int}
+ ,## Spouse's insurance age on effective date of spouse rider.
+ ## Default: '35' if rider not elected or not offered.
+ element SpouseIssueAge {age_int}
+ ,## Spouse term rider: elected or not.
+ element SpouseRider {yes_or_no}
+ ,## Spouse term rider: face amount.
+ element SpouseRiderAmount {nonnegative_double}
+ ,## Insured's address: state.
+ element State {state}
+ ,## State that approves policy form and rate filing, and governs
+ ## everything else except premium tax.
+ element StateOfJurisdiction {state}
+ ,## Substandard table rating.
+ element SubstandardTable {table_rating}
+ ,## * Built-in supplemental illustration type.
+ element SupplementalIllustrationType {suppl_illus_type}
+ ,## * User-designed supplemental illustration: first column.
+ element SupplementalReportColumn00 {report_column}
+ ,## * User-designed supplemental illustration: second column.
+ element SupplementalReportColumn01 {report_column}
+ ,## * User-designed supplemental illustration: third column.
+ element SupplementalReportColumn02 {report_column}
+ ,## * User-designed supplemental illustration: fourth column.
+ element SupplementalReportColumn03 {report_column}
+ ,## * User-designed supplemental illustration: fifth column.
+ element SupplementalReportColumn04 {report_column}
+ ,## * User-designed supplemental illustration: sixth column.
+ element SupplementalReportColumn05 {report_column}
+ ,## * User-designed supplemental illustration: seventh column.
+ element SupplementalReportColumn06 {report_column}
+ ,## * User-designed supplemental illustration: eighth column.
+ element SupplementalReportColumn07 {report_column}
+ ,## * User-designed supplemental illustration: ninth column.
+ element SupplementalReportColumn08 {report_column}
+ ,## * User-designed supplemental illustration: tenth column.
+ element SupplementalReportColumn09 {report_column}
+ ,## * User-designed supplemental illustration: eleventh column.
+ element SupplementalReportColumn10 {report_column}
+ ,## * User-designed supplemental illustration: twelfth column.
+ element SupplementalReportColumn11 {report_column}
+ ,## Supplemental specified amount (e.g., individually-elected
+ ## extra coverage on a group plan) for each policy year since
+ ## issue. Inforce extracts require only the current scalar value.
+ ## Default: '0'.
+ element SupplementalSpecifiedAmount {specamt_sequence}
+ ,## * Presumed age at death, for partial mortality. Default: '99'.
+ element SurviveToAge {age_int}
+ ,## * Presumed moment of death, for partial mortality.
+ element SurviveToType {survival_limit}
+ ,## * Presumed policy year of death, for partial mortality. Default: '100'.
+ element SurviveToYear {duration_int}
+ ,## * Insured's tax bracket. Default: '0'.
+ element TaxBracket {numeric_sequence}
+ ,## * Order in which term and base are affected by changes in
+ ## total specified amount.
+ element TermAdjustmentMethod {term_adj_method}
+ ,## Term rider on main insured: elected or not.
+ element TermRider {yes_or_no}
+ ,## Term rider on main insured: face amount.
+ element TermRiderAmount {nonnegative_double}
+ ,## * Term rider as proportion of term and base combined.
+ element TermRiderProportion {proportion_double}
+ ,## * Treat term rider as proportion of term and base combined.
+ element TermRiderUseProportion {yes_or_no}
+ ,## * Initial specified amount of term and base combined, when
+ ## term rider is specified as a proportion of this total.
+ element TotalSpecifiedAmount {nonnegative_double}
+ ,## Underwriting class. Default: 'Standard'.
+ element UnderwritingClass {class}
+ ,## * Use mean separate-account fee.
+ element UseAverageOfAllFunds {yes_or_no}
+ ,## * Use current declared rate (read from authenticated database)
+ ## instead of entering the crediting rate explicitly. Default: 'Yes'.
+ element UseCurrentDeclaredRate {yes_or_no}
+ ,## * Let date of birth override issue age. Default: 'Yes'.
+ element UseDOB {yes_or_no}
+ ,## Use experience rating, on the few contracts that offer it.
+ element UseExperienceRating {yes_or_no}
+ ,## * Illustrate "partial mortality": i.e., reflect assumed deaths
+ ## in a composite illustration.
+ element UsePartialMortality {yes_or_no}
+ ,## Waiver of premium benefit: elected or not.
+ element WaiverOfPremiumBenefit {yes_or_no}
+ ,## * Reinterpret input withdrawals as loans after tax basis recovered.
+ element WithdrawToBasisThenLoan {yes_or_no}
+ ,## * Partial surrender. Default: '0'.
+ element Withdrawal {numeric_sequence}
+ ,## * [obsolete]
+ element WithdrawalAmount {nonnegative_double}?
+ ,## * [obsolete]
+ element WithdrawalFromAge {age_int}?
+ ,## * [obsolete]
+ element WithdrawalFromAlternative {from_point}?
+ ,## * [obsolete]
+ element WithdrawalFromDuration {duration_int}?
+ ,## * [obsolete]
+ element WithdrawalToAge {age_int}?
+ ,## * [obsolete]
+ element WithdrawalToAlternative {to_point}?
+ ,## * [obsolete]
+ element WithdrawalToDuration {duration_int}?
+ ,## Insured's address: zip code.
+ element ZipCode {text}
+ }
+
+include "types.rnc"
+
diff --git a/cell_08.xsd b/cell_08.xsd
new file mode 100644
index 0000000..6264e3d
--- /dev/null
+++ b/cell_08.xsd
@@ -0,0 +1,1440 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
+ <xs:include schemaLocation="types.xsd"/>
+ <!--
+ RELAX NG schema for a single cell (class Input).
+
+ Copyright (C) 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
+ -->
+ <!--
+ This schema is meant not for standalone use, but rather for
+ inclusion from other schemata.
+ -->
+ <!--
+ Inforce data from external systems should use default values for
+ elements marked with an asterisk.
+ -->
+ <xs:complexType name="cell_element">
+ <xs:sequence>
+ <xs:element ref="cell"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="cell">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="AccidentalDeathBenefit"/>
+ <xs:element ref="Address"/>
+ <xs:element ref="AgentAddress"/>
+ <xs:element ref="AgentCity"/>
+ <xs:element ref="AgentId"/>
+ <xs:element ref="AgentName"/>
+ <xs:element ref="AgentPhone"/>
+ <xs:element ref="AgentState"/>
+ <xs:element ref="AgentZipCode"/>
+ <xs:element ref="AmortizePremiumLoad"/>
+ <xs:element ref="AvoidMecMethod"/>
+ <xs:element ref="BlendGender"/>
+ <xs:element ref="BlendSmoking"/>
+ <xs:element ref="CashValueEnhancementRate"/>
+ <xs:element ref="ChildRider"/>
+ <xs:element ref="ChildRiderAmount"/>
+ <xs:element ref="City"/>
+ <xs:element ref="Comments"/>
+ <xs:element ref="ContractNumber"/>
+ <xs:element ref="CorporationAddress"/>
+ <xs:element ref="CorporationCity"/>
+ <xs:element ref="CorporationName"/>
+ <xs:element ref="CorporationPayment"/>
+ <xs:element ref="CorporationPaymentMode"/>
+ <xs:element ref="CorporationPremiumTableFactor"/>
+ <xs:element ref="CorporationState"/>
+ <xs:element ref="CorporationTaxBracket"/>
+ <xs:element ref="CorporationZipCode"/>
+ <xs:element ref="Country"/>
+ <xs:element ref="CountryCoiMultiplier"/>
+ <xs:element ref="CreateSupplementalReport"/>
+ <xs:element ref="CurrentCoiMultiplier"/>
+ <xs:element ref="DateOfBirth"/>
+ <xs:element ref="DeathBenefitOption"/>
+ <xs:element minOccurs="0" ref="DeathBenefitOptionFromIssue"/>
+ <xs:element minOccurs="0" ref="DeathBenefitOptionFromRetirement"/>
+ <xs:element ref="DefinitionOfLifeInsurance"/>
+ <xs:element ref="DefinitionOfMaterialChange"/>
+ <xs:element ref="Dumpin"/>
+ <xs:element ref="EffectiveDate"/>
+ <xs:element ref="EffectiveDateToday"/>
+ <xs:element ref="EmployeeClass"/>
+ <xs:element ref="ExperienceRatingInitialKFactor"/>
+ <xs:element ref="ExperienceReserveRate"/>
+ <xs:element ref="External1035ExchangeAmount"/>
+ <xs:element ref="External1035ExchangeFromMec"/>
+ <xs:element ref="External1035ExchangeTaxBasis"/>
+ <xs:element ref="ExtraCompensationOnAssets"/>
+ <xs:element ref="ExtraCompensationOnPremium"/>
+ <xs:element ref="ExtraMonthlyCustodialFee"/>
+ <xs:element ref="FlatExtra"/>
+ <xs:element ref="FundAllocations"/>
+ <xs:element ref="FundChoiceType"/>
+ <xs:element ref="Gender"/>
+ <xs:element ref="GeneralAccountRate"/>
+ <xs:element ref="GeneralAccountRateType"/>
+ <xs:element ref="GroupUnderwritingType"/>
+ <xs:element ref="HoneymoonEndorsement"/>
+ <xs:element ref="HoneymoonValueSpread"/>
+ <xs:element ref="IncludeInComposite"/>
+ <xs:element minOccurs="0" ref="IndividualPaymentAmount"/>
+ <xs:element minOccurs="0" ref="IndividualPaymentMode"/>
+ <xs:element ref="IndividualPaymentStrategy"/>
+ <xs:element minOccurs="0" ref="IndividualPaymentToAge"/>
+ <xs:element minOccurs="0" ref="IndividualPaymentToAlternative"/>
+ <xs:element minOccurs="0" ref="IndividualPaymentToDuration"/>
+ <xs:element ref="Inforce7702AAmountsPaidHistory"/>
+ <xs:element ref="InforceAnnualTargetPremium"/>
+ <xs:element ref="InforceAsOfDate"/>
+ <xs:element ref="InforceAvBeforeLastMc"/>
+ <xs:element ref="InforceContractMonth"/>
+ <xs:element ref="InforceContractYear"/>
+ <xs:element ref="InforceCorporationStake"/>
+ <xs:element ref="InforceCumulativeGlp"/>
+ <xs:element ref="InforceCumulativeGptPremiumsPaid"/>
+ <xs:element ref="InforceCumulativeNoLapsePayments"/>
+ <xs:element ref="InforceCumulativeNoLapsePremium"/>
+ <xs:element ref="InforceCumulativeRopPayments"/>
+ <xs:element ref="InforceCumulativeSalesLoad"/>
+ <xs:element ref="InforceDataSource"/>
+ <xs:element ref="InforceDcv"/>
+ <xs:element ref="InforceGeneralAccountValue"/>
+ <xs:element ref="InforceGlp"/>
+ <xs:element ref="InforceGsp"/>
+ <xs:element ref="InforceHoneymoonValue"/>
+ <xs:element ref="InforceIsMec"/>
+ <xs:element ref="InforceLeastDeathBenefit"/>
+ <xs:element ref="InforceMonth"/>
+ <xs:element ref="InforceMonthlyNoLapsePremium"/>
+ <xs:element ref="InforceNetExperienceReserve"/>
+ <xs:element ref="InforceNoLapseActive"/>
+ <xs:element ref="InforcePreferredLoanBalance"/>
+ <xs:element ref="InforcePreferredLoanValue"/>
+ <xs:element ref="InforceRegularLoanBalance"/>
+ <xs:element ref="InforceRegularLoanValue"/>
+ <xs:element ref="InforceSeparateAccountValue"/>
+ <xs:element ref="InforceSevenPayPremium"/>
+ <xs:element ref="InforceSpecAmtLoadBase"/>
+ <xs:element ref="InforceTaxBasis"/>
+ <xs:element ref="InforceYear"/>
+ <xs:element ref="InforceYtdGrossPremium"/>
+ <xs:element ref="InforceYtdNetCoiCharge"/>
+ <xs:element ref="InforceYtdTaxablePremium"/>
+ <xs:element ref="InputFundManagementFee"/>
+ <xs:element ref="InsuredName"/>
+ <xs:element ref="InsuredPremiumTableFactor"/>
+ <xs:element ref="Internal1035ExchangeAmount"/>
+ <xs:element ref="Internal1035ExchangeFromMec"/>
+ <xs:element ref="Internal1035ExchangeTaxBasis"/>
+ <xs:element ref="IssueAge"/>
+ <xs:element ref="LastCoiReentryDate"/>
+ <xs:element ref="LastMaterialChangeDate"/>
+ <xs:element minOccurs="0" ref="ListBillDate"/>
+ <xs:element minOccurs="0" ref="LoanAmount"/>
+ <xs:element minOccurs="0" ref="LoanFromAge"/>
+ <xs:element minOccurs="0" ref="LoanFromAlternative"/>
+ <xs:element minOccurs="0" ref="LoanFromDuration"/>
+ <xs:element ref="LoanRate"/>
+ <xs:element ref="LoanRateType"/>
+ <xs:element minOccurs="0" ref="LoanToAge"/>
+ <xs:element minOccurs="0" ref="LoanToAlternative"/>
+ <xs:element minOccurs="0" ref="LoanToDuration"/>
+ <xs:element ref="MaleProportion"/>
+ <xs:element ref="MasterContractNumber"/>
+ <xs:element ref="MaximumNaar"/>
+ <xs:element ref="NewLoan"/>
+ <xs:element ref="NonsmokerProportion"/>
+ <xs:element ref="NumberOfIdenticalLives"/>
+ <xs:element ref="OverrideCoiMultiplier"/>
+ <xs:element ref="OverrideExperienceReserveRate"/>
+ <xs:element ref="OverrideFundManagementFee"/>
+ <xs:element ref="PartialMortalityMultiplier"/>
+ <xs:element ref="Payment"/>
+ <xs:element ref="PaymentMode"/>
+ <xs:element ref="PostHoneymoonSpread"/>
+ <xs:element ref="PremiumTaxState"/>
+ <xs:element ref="ProductName"/>
+ <xs:element ref="ProjectedSalary"/>
+ <xs:element ref="RetireesCanEnroll"/>
+ <xs:element ref="RetirementAge"/>
+ <xs:element ref="RunOrder"/>
+ <xs:element ref="SalarySpecifiedAmountCap"/>
+ <xs:element ref="SalarySpecifiedAmountFactor"/>
+ <xs:element ref="SalarySpecifiedAmountOffset"/>
+ <xs:element ref="SeparateAccountRate"/>
+ <xs:element ref="SeparateAccountRateType"/>
+ <xs:element ref="Smoking"/>
+ <xs:element ref="SolveBeginTime"/>
+ <xs:element ref="SolveBeginYear"/>
+ <xs:element ref="SolveEndTime"/>
+ <xs:element ref="SolveEndYear"/>
+ <xs:element ref="SolveExpenseGeneralAccountBasis"/>
+ <xs:element ref="SolveFromWhich"/>
+ <xs:element ref="SolveSeparateAccountBasis"/>
+ <xs:element ref="SolveTarget"/>
+ <xs:element ref="SolveTargetCashSurrenderValue"/>
+ <xs:element ref="SolveTargetTime"/>
+ <xs:element ref="SolveTargetYear"/>
+ <xs:element ref="SolveTgtAtWhich"/>
+ <xs:element ref="SolveToWhich"/>
+ <xs:element ref="SolveType"/>
+ <xs:element ref="SpecifiedAmount"/>
+ <xs:element minOccurs="0" ref="SpecifiedAmountFromIssue"/>
+ <xs:element minOccurs="0" ref="SpecifiedAmountFromRetirement"/>
+ <xs:element ref="SpecifiedAmountStrategyFromIssue"/>
+ <xs:element ref="SplitDollarAccumulateInterest"/>
+ <xs:element ref="SplitDollarLoanRate"/>
+ <xs:element ref="SplitDollarRolloutAge"/>
+ <xs:element ref="SplitDollarRolloutAtWhich"/>
+ <xs:element ref="SplitDollarRolloutYear"/>
+ <xs:element ref="SpouseIssueAge"/>
+ <xs:element ref="SpouseRider"/>
+ <xs:element ref="SpouseRiderAmount"/>
+ <xs:element ref="State"/>
+ <xs:element ref="StateOfJurisdiction"/>
+ <xs:element ref="SubstandardTable"/>
+ <xs:element ref="SupplementalIllustrationType"/>
+ <xs:element ref="SupplementalReportColumn00"/>
+ <xs:element ref="SupplementalReportColumn01"/>
+ <xs:element ref="SupplementalReportColumn02"/>
+ <xs:element ref="SupplementalReportColumn03"/>
+ <xs:element ref="SupplementalReportColumn04"/>
+ <xs:element ref="SupplementalReportColumn05"/>
+ <xs:element ref="SupplementalReportColumn06"/>
+ <xs:element ref="SupplementalReportColumn07"/>
+ <xs:element ref="SupplementalReportColumn08"/>
+ <xs:element ref="SupplementalReportColumn09"/>
+ <xs:element ref="SupplementalReportColumn10"/>
+ <xs:element ref="SupplementalReportColumn11"/>
+ <xs:element ref="SupplementalSpecifiedAmount"/>
+ <xs:element ref="SurviveToAge"/>
+ <xs:element ref="SurviveToType"/>
+ <xs:element ref="SurviveToYear"/>
+ <xs:element ref="TaxBracket"/>
+ <xs:element ref="TermAdjustmentMethod"/>
+ <xs:element ref="TermRider"/>
+ <xs:element ref="TermRiderAmount"/>
+ <xs:element ref="TermRiderProportion"/>
+ <xs:element ref="TermRiderUseProportion"/>
+ <xs:element ref="TotalSpecifiedAmount"/>
+ <xs:element ref="UnderwritingClass"/>
+ <xs:element ref="UseAverageOfAllFunds"/>
+ <xs:element ref="UseCurrentDeclaredRate"/>
+ <xs:element ref="UseDOB"/>
+ <xs:element ref="UseExperienceRating"/>
+ <xs:element ref="UsePartialMortality"/>
+ <xs:element ref="WaiverOfPremiumBenefit"/>
+ <xs:element ref="WithdrawToBasisThenLoan"/>
+ <xs:element ref="Withdrawal"/>
+ <xs:element minOccurs="0" ref="WithdrawalAmount"/>
+ <xs:element minOccurs="0" ref="WithdrawalFromAge"/>
+ <xs:element minOccurs="0" ref="WithdrawalFromAlternative"/>
+ <xs:element minOccurs="0" ref="WithdrawalFromDuration"/>
+ <xs:element minOccurs="0" ref="WithdrawalToAge"/>
+ <xs:element minOccurs="0" ref="WithdrawalToAlternative"/>
+ <xs:element minOccurs="0" ref="WithdrawalToDuration"/>
+ <xs:element ref="ZipCode"/>
+ </xs:sequence>
+ <xs:attribute name="version" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="8"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="AccidentalDeathBenefit" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Accidental death benefit: elected or
not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Address" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Insured's address: number and
street.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentAddress" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent's address: number and street.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentCity" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent's address: city.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentId" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent ID code.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentName" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent's full name.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentPhone" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent's phone number.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentState" type="state">
+ <xs:annotation>
+ <xs:documentation>Agent's address: state.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AgentZipCode" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Agent's address: zip code.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AmortizePremiumLoad" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Amortize premium load (occasionally used for
BOLI).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="AvoidMecMethod" type="mec_avoid_method">
+ <xs:annotation>
+ <xs:documentation>* Special logic, if any, to avoid a
MEC.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="BlendGender" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Custom-blend rates by gender.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="BlendSmoking" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Custom-blend rates by smoking.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CashValueEnhancementRate" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Negative surrender charge as proportion of total
account
+value. Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ChildRider" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Child(ren) term rider: elected or
not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ChildRiderAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Child(ren) term rider: face amount.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="City" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Insured's address: city.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Comments" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>* Free-form comments.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ContractNumber" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Contract number: a unique identifier, which, although
usually
+called a "number", is often not purely numeric.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationAddress" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Corporation's address: number and
street.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationCity" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Corporation's address: city.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationName" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Corporation's name.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationPayment" type="payment_sequence">
+ <xs:annotation>
+ <xs:documentation>Corporation's planned premium. Default:
'0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationPaymentMode" type="mode_sequence">
+ <xs:annotation>
+ <xs:documentation>Corporation's premium mode. Default:
'annual'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationPremiumTableFactor" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Corporation's tabular-premium multiplier. Default:
'1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationState" type="state">
+ <xs:annotation>
+ <xs:documentation>Corporation's address: state.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationTaxBracket" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Corporation's tax bracket. Default:
'0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CorporationZipCode" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Corporation's address: zip code.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Country" type="country">
+ <xs:annotation>
+ <xs:documentation>Insured's address: country. Default:
'US'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CountryCoiMultiplier" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>COI multiplier for country. Default:
'1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CreateSupplementalReport" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: elected or
not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="CurrentCoiMultiplier" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Multiplier for current COI rates. Default:
'1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DateOfBirth" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Insured's date of birth.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DeathBenefitOption" type="dbo_sequence">
+ <xs:annotation>
+ <xs:documentation>Death benefit option. Default: 'a'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DeathBenefitOptionFromIssue" type="dbopt">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DeathBenefitOptionFromRetirement" type="dbopt">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DefinitionOfLifeInsurance" type="defn_life_ins">
+ <xs:annotation>
+ <xs:documentation>7702 definitional test.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="DefinitionOfMaterialChange" type="defn_material_change">
+ <xs:annotation>
+ <xs:documentation>* 7702A definition of material change. Default:
+'GPT adjustment event' if GPT; else 'Unnecessary premium'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Dumpin" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Dump-in: i.e., first-year-only extra premium other
than a 1035 exchange.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="EffectiveDate" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Effective date: for UL, date of first monthly
deduction.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="EffectiveDateToday" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Use today's date as effective date: handy for new
business.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="EmployeeClass" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>* Employee class, used for grouping individuals in
order to
+make input easier. E.g., specified amount for 'partners' might
+be two times salary, while 'all others' get a flat $50K.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ExperienceRatingInitialKFactor" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Factor for amortizing mortality profit into future
charges.
+Default: '1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ExperienceReserveRate" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Overridden reserve rate for experience
rating.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="External1035ExchangeAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Amount of 1035 exchange from a different
insurer.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="External1035ExchangeFromMec" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* MEC status of 1035 exchange from a different
insurer.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="External1035ExchangeTaxBasis" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>* Tax basis of 1035 exchange from a different
insurer.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ExtraCompensationOnAssets" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Extra charge on separate-account assets. The
motivation is to
+let end users add a negotiated asset trailer without changing
+the product database, but the field may be used for any extra
+charge in the nature of M&E. Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ExtraCompensationOnPremium" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Extra premium load. The motivation is to let end users
add a
+negotiated commission without changing the product database,
+but the field may be used for any extra load on premium.
+Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ExtraMonthlyCustodialFee" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Extra policy fee. The motivation is to let end users
add an
+additional monthly custodial fee for a custom fund, but the
+field may be used for any extra monthly fee. Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="FlatExtra" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Annual flat extra per thousand of specified amount.
Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="FundAllocations" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>* As yet unused.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="FundChoiceType" type="fund_input_method">
+ <xs:annotation>
+ <xs:documentation>* Fund-allocation override.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Gender" type="gender">
+ <xs:annotation>
+ <xs:documentation>Insured's gender for insurance
purposes.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="GeneralAccountRate" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>General-account interest rate as a decimal: e.g.,
'.03' for
+3%. Default: actual credited rate; '0' for products with no
+general-account option.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="GeneralAccountRateType" type="gen_acct_rate_type">
+ <xs:annotation>
+ <xs:documentation>* General-account rate: before or after
spread.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="GroupUnderwritingType" type="uw_basis">
+ <xs:annotation>
+ <xs:documentation>Type of underwriting, e.g. guaranteed
issue.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="HoneymoonEndorsement" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Honeymoon: elected or not. This is a temporary
secondary
+guarantee that enhances surrender values in early years, by
+setting a minimum CSV equal to gross premium accumulated at a
+special interest rate, with no monthly deductions taken.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="HoneymoonValueSpread" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>Interest spread for honeymoon value, which grows at
the net
+general account rate less this decrement. Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IncludeInComposite" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Include this life in composite: permits excluding
certain
+lives from a composite without deleting them from a census.
+Default: 'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentMode" type="mode">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentStrategy" type="pmt_strategy">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentToAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentToAlternative" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IndividualPaymentToDuration" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Inforce7702AAmountsPaidHistory" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>7702A "amounts paid" for each "contract year" since
beginning
+of most recent seven-pay period. Default: '0' if not in a
+seven-pay period.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceAnnualTargetPremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce annual target premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceAsOfDate" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Date as of which inforce values are provided. This is
taken to
+refer to the first moment of the day, before monthiversary
+processing. Some admin systems find it more convenient to
+provide values as of the last moment of the preceding day; in
+that case, this field should indicate the day following that
+preceding day, i.e., the day monthiversary processing
occurs.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceAvBeforeLastMc" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce account value before last material change, for
7702A.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceContractMonth" type="month_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceContractYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCorporationStake" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Corporation's inforce stake in a benefit plan (e.g.,
amount of
+a full split-dollar rollout): cumulative corporation payments,
+plus accumulated interest if interest not paid in cash.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeGlp" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative 7702 guideline level
premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeGptPremiumsPaid" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative 7702(f)(1) 'premiums
paid'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeNoLapsePayments"
type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative payments for no-lapse guarantee:
sum of all
+gross premiums, including dump-ins and 1035 exchange proceeds,
+minus rider charges, withdrawals, and premiums refunded or
+forced out.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeNoLapsePremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative no-lapse premium, for contracts
that offer
+a no-lapse guarantee as long as a cumulative minimum premium
+is paid.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeRopPayments" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative payments for return of premium death
+benefit option and for loads banded by cumulative premium:
+sum of all gross premiums, including dump-ins and 1035
+exchange proceeds, minus withdrawals and premiums refunded
+or forced out.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceCumulativeSalesLoad" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce cumulative refundable sales
load.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceDataSource" type="xs:nonNegativeInteger">
+ <xs:annotation>
+ <xs:documentation>Vendor identifier for files from an external
system.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceDcv" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce 7702A deemed cash value.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceGeneralAccountValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce unloaned account value in the general
account.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceGlp" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce 7702 guideline level
premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceGsp" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce 7702 guideline single
premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceHoneymoonValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce honeymoon value. Zero if honeymoon has expired
or
+was never present.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceIsMec" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>MEC status of inforce contract.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceLeastDeathBenefit" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce 7702A least death benefit.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceMonth" type="month_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceMonthlyNoLapsePremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Monthly premium required to maintain no-lapse
guarantee.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceNetExperienceReserve" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce net reserve for experience
rating.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceNoLapseActive" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>No-lapse guarantee is in effect.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforcePreferredLoanBalance" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce balance (total indebtedness) for preferred
loans:
+the amount that must be repaid to liquidate the loan.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforcePreferredLoanValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce loaned account value for preferred loans,
including
+principal and interest credited, but excluding interest
+accrued: the portion of account value held in the loan
+division of the general account with respect to the loan.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceRegularLoanBalance" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce balance (total indebtedness) for regular loans:
+the amount that must be repaid to liquidate the loan.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceRegularLoanValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce loaned account value for regular loans,
including
+principal and interest credited, but excluding interest
+accrued: the portion of account value held in the loan
+division of the general account with respect to the loan.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceSeparateAccountValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce account value in all separate accounts,
combined.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceSevenPayPremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Inforce 7702A seven-pay premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceSpecAmtLoadBase" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Amount on which specified-amount load is charged, with
due
+regard to term rider and corridor.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceTaxBasis" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>Inforce tax basis.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceYtdGrossPremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Policy-year-to-date payments counted toward target
premium.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceYtdNetCoiCharge" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Policy-year-to-date "net" COI charge for experience
rating.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InforceYtdTaxablePremium" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Policy-year-to-date payments subject to premium
tax.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InputFundManagementFee" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Investment management fee of a custom
fund.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InsuredName" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Insured's full name.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="InsuredPremiumTableFactor" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Insured's tabular-premium multiplier. Default:
'1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Internal1035ExchangeAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Amount of 1035 exchange from the same insurer;
distinguished
+from external 1035 because an internal exchange may not be
+subject to premium tax.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Internal1035ExchangeFromMec" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* MEC status of 1035 exchange from the same
insurer.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Internal1035ExchangeTaxBasis" type="xs:double">
+ <xs:annotation>
+ <xs:documentation>* Tax basis of 1035 exchange from the same
insurer.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="IssueAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>Insurance age on effective date.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LastCoiReentryDate" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Most recent group-underwriting date, for group
contracts that
+reenter a select and ultimate table of COI rates periodically
+upon successful re-underwriting (for active lives only).
+Default: effective date, for contracts with no reentry.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LastMaterialChangeDate" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Date of most recent 7702A material change. Default:
effective
+date, for contracts that have never had a material change.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ListBillDate" type="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Date of a list bill generated by the illustration
system.
+Default: the value of 'InforceAsOfDate'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanFromAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanFromAlternative" type="from_point">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanFromDuration" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanRate" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Loan interest rate, if it is variable. Default: '0'
otherwise.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanRateType" type="loan_rate_type">
+ <xs:annotation>
+ <xs:documentation>Loan rate: fixed or variable.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanToAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanToAlternative" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="LoanToDuration" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="MaleProportion" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Proportion of males when rates are custom-blended by
gender.
+Default: '0' otherwise.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="MasterContractNumber" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Group master contract number.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="MaximumNaar" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Maximum net amount at risk, as constrained by
reinsurance.
+Some contracts in the high-net-worth market force money out to
+prevent corridor death benefit from exceeding available
+reinsurance. Default: '1000000000'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="NewLoan" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* New loan taken in cash (excluding capitalized
interest).
+Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="NonsmokerProportion" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Proportion of nonsmokers when rates are custom-blended
by
+smoking. Default: '0' otherwise.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="NumberOfIdenticalLives" type="xs:nonNegativeInteger">
+ <xs:annotation>
+ <xs:documentation>* Number of identical lives represented by a single
census
+cell. It is sometimes convenient to approximate a population
+by specifying a few cells and indicating the number of lives
+each one represents. Default: '1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="OverrideCoiMultiplier" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Override country COI multiplier. Default:
'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="OverrideExperienceReserveRate" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Override reserve rate for experience rating. Default:
'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="OverrideFundManagementFee" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Override investment management fee: used only with
custom funds.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="PartialMortalityMultiplier" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Multiplier applied to partial-mortality table.
Default: '1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Payment" type="payment_sequence">
+ <xs:annotation>
+ <xs:documentation>Insured's planned premium. Default:
'0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="PaymentMode" type="mode_sequence">
+ <xs:annotation>
+ <xs:documentation>Insured's premium mode. Default:
'annual'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="PostHoneymoonSpread" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Interest decrement applied to crediting rate after the
+honeymoon expires--designed to recover the cost of providing
+the honeymoon.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="PremiumTaxState" type="state">
+ <xs:annotation>
+ <xs:documentation>State to which premium tax is paid.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ProductName" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Product (plan): enumerators depend on run-time
context.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ProjectedSalary" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Projected salary: used for salary-based benefits.
Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="RetireesCanEnroll" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Retirees allowed to enroll (or not). This is handy
for
+warning when retirees are unintentionally included in a
+census. Default: 'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="RetirementAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* Insured's retirement age. Default:
'65'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="RunOrder" type="run_order">
+ <xs:annotation>
+ <xs:documentation>* Order in which different individuals in a census are
+processed.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SalarySpecifiedAmountCap" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Maximum salary-based specified amount. Default:
'100000'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SalarySpecifiedAmountFactor" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Salary multiple used to determine specified amount.
Default: '1'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SalarySpecifiedAmountOffset" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Amount to be subtracted from salary-based specified
amount,
+intended to represent basic group term coverage. Default:
'50000'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SeparateAccountRate" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Separate-account hypothetical rate as a decimal:
e.g.,
+'.0654' for 6.54%. Default: '.08'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SeparateAccountRateType" type="sep_acct_rate_type">
+ <xs:annotation>
+ <xs:documentation>* Separate-account rate: before or after spread.
Default: 'Gross rate'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Smoking" type="smoking">
+ <xs:annotation>
+ <xs:documentation>Insured's smoking or tobacco use.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveBeginTime" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Age at which a solve begins
(inclusive).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveBeginYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Policy year in which a solve begins
(inclusive).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveEndTime" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Age at which a solve ends
(exclusive).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveEndYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Policy year at which a solve ends
(exclusive).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveExpenseGeneralAccountBasis" type="gen_basis">
+ <xs:annotation>
+ <xs:documentation>* Expense and general-account basis for a solve: lmi
permits
+solves on guaranteed and midpoint bases as well as current.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveFromWhich" type="from_point">
+ <xs:annotation>
+ <xs:documentation>* Point at which a solve begins.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveSeparateAccountBasis" type="sep_basis">
+ <xs:annotation>
+ <xs:documentation>* Separate-account basis for a solve: lmi permits
solves on
+the basis of the hypothetical rate, half that rate, or zero.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveTarget" type="solve_target">
+ <xs:annotation>
+ <xs:documentation>* Solve goal.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveTargetCashSurrenderValue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Cash surrender value used as solve
goal.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveTargetTime" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Age at which a solve target is to be
achieved.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveTargetYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Policy year in which a solve target is to be
achieved.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveTgtAtWhich" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* Point at which a solve target is to be
achieved.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveToWhich" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* Point at which a solve ends.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SolveType" type="solve_type">
+ <xs:annotation>
+ <xs:documentation>* Parameter to be solved for.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpecifiedAmount" type="specamt_sequence">
+ <xs:annotation>
+ <xs:documentation>Specified amount for each policy year since issue.
Inforce
+extracts require only the current scalar value. Default:
'0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpecifiedAmountFromIssue" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpecifiedAmountFromRetirement" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpecifiedAmountStrategyFromIssue" type="sa_strategy">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SplitDollarAccumulateInterest" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Accumulate interest at demand-loan rate for split
dollar,
+rather than paying it in cash.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SplitDollarLoanRate" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Split-dollar annual demand-loan rate (typically the
AFR).</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SplitDollarRolloutAge" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Split-dollar rollout age.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SplitDollarRolloutAtWhich" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* Point at which split-dollar rollout is
planned.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SplitDollarRolloutYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Split-dollar rollout duration.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpouseIssueAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>Spouse's insurance age on effective date of spouse
rider.
+Default: '35' if rider not elected or not offered.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpouseRider" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Spouse term rider: elected or not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SpouseRiderAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Spouse term rider: face amount.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="State" type="state">
+ <xs:annotation>
+ <xs:documentation>Insured's address: state.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="StateOfJurisdiction" type="state">
+ <xs:annotation>
+ <xs:documentation>State that approves policy form and rate filing, and
governs
+everything else except premium tax.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SubstandardTable" type="table_rating">
+ <xs:annotation>
+ <xs:documentation>Substandard table rating.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalIllustrationType" type="suppl_illus_type">
+ <xs:annotation>
+ <xs:documentation>* Built-in supplemental illustration
type.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn00" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: first
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn01" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: second
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn02" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: third
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn03" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: fourth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn04" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: fifth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn05" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: sixth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn06" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: seventh
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn07" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: eighth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn08" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: ninth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn09" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: tenth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn10" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: eleventh
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalReportColumn11" type="report_column">
+ <xs:annotation>
+ <xs:documentation>* User-designed supplemental illustration: twelfth
column.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SupplementalSpecifiedAmount" type="specamt_sequence">
+ <xs:annotation>
+ <xs:documentation>Supplemental specified amount (e.g.,
individually-elected
+extra coverage on a group plan) for each policy year since
+issue. Inforce extracts require only the current scalar value.
+Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SurviveToAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* Presumed age at death, for partial mortality.
Default: '99'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SurviveToType" type="survival_limit">
+ <xs:annotation>
+ <xs:documentation>* Presumed moment of death, for partial
mortality.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="SurviveToYear" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* Presumed policy year of death, for partial
mortality. Default: '100'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TaxBracket" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Insured's tax bracket. Default:
'0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TermAdjustmentMethod" type="term_adj_method">
+ <xs:annotation>
+ <xs:documentation>* Order in which term and base are affected by changes
in
+total specified amount.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TermRider" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Term rider on main insured: elected or
not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TermRiderAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Term rider on main insured: face
amount.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TermRiderProportion" type="proportion_double">
+ <xs:annotation>
+ <xs:documentation>* Term rider as proportion of term and base
combined.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TermRiderUseProportion" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Treat term rider as proportion of term and base
combined.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="TotalSpecifiedAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* Initial specified amount of term and base combined,
when
+term rider is specified as a proportion of this total.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UnderwritingClass" type="class">
+ <xs:annotation>
+ <xs:documentation>Underwriting class. Default:
'Standard'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UseAverageOfAllFunds" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Use mean separate-account fee.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UseCurrentDeclaredRate" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Use current declared rate (read from authenticated
database)
+instead of entering the crediting rate explicitly. Default:
'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UseDOB" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Let date of birth override issue age. Default:
'Yes'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UseExperienceRating" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Use experience rating, on the few contracts that offer
it.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="UsePartialMortality" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Illustrate "partial mortality": i.e., reflect
assumed deaths
+in a composite illustration.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WaiverOfPremiumBenefit" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>Waiver of premium benefit: elected or
not.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawToBasisThenLoan" type="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>* Reinterpret input withdrawals as loans after tax
basis recovered.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="Withdrawal" type="numeric_sequence">
+ <xs:annotation>
+ <xs:documentation>* Partial surrender. Default: '0'.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalAmount" type="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalFromAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalFromAlternative" type="from_point">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalFromDuration" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalToAge" type="age_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalToAlternative" type="to_point">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="WithdrawalToDuration" type="duration_int">
+ <xs:annotation>
+ <xs:documentation>* [obsolete]</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="ZipCode" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Insured's address: zip code.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+</xs:schema>
diff --git a/multiple_cell_document_02.rnc b/multiple_cell_document_02.rnc
new file mode 100644
index 0000000..a6d54c1
--- /dev/null
+++ b/multiple_cell_document_02.rnc
@@ -0,0 +1,42 @@
+# RELAX NG schema for '.cns' files (class multiple_cell_document).
+#
+# Copyright (C) 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
+
+# Use file extension '.cns' for multiple-life xml documents.
+
+# Inforce data from external systems must include 'case_default' and
+# 'class_defaults'; but those elements wouldn't be expected to have
+# any analogue on an administration system, so it seems best to copy
+# them from this document:
+# http://git.savannah.gnu.org/cgit/lmi.git/plain/sample.cns
+# overwriting its 'particular_cells' with the individual records of
+# all contracts in the group.
+
+start = element multiple_cell_document
+ {attribute version {"2"}
+ ,attribute data_source {xsd:nonNegativeInteger}
+
+ ,element case_default {cell_element }
+ ,element class_defaults {cell_element +}
+ ,element particular_cells {cell_element +}
+ }
+
+include "cell.rnc"
+
diff --git a/multiple_cell_document_02.xsd b/multiple_cell_document_02.xsd
new file mode 100644
index 0000000..455bdfa
--- /dev/null
+++ b/multiple_cell_document_02.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
+ <xs:include schemaLocation="cell.xsd"/>
+ <!--
+ RELAX NG schema for '.cns' files (class multiple_cell_document).
+
+ Copyright (C) 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
+ -->
+ <!-- Use file extension '.cns' for multiple-life xml documents. -->
+ <!--
+ Inforce data from external systems must include 'case_default' and
+ 'class_defaults'; but those elements wouldn't be expected to have
+ any analogue on an administration system, so it seems best to copy
+ them from this document:
+ http://git.savannah.gnu.org/cgit/lmi.git/plain/sample.cns
+ overwriting its 'particular_cells' with the individual records of
+ all contracts in the group.
+ -->
+ <xs:element name="multiple_cell_document">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="case_default"/>
+ <xs:element ref="class_defaults"/>
+ <xs:element ref="particular_cells"/>
+ </xs:sequence>
+ <xs:attribute name="version" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="2"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="data_source" use="required"
type="xs:nonNegativeInteger"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="case_default">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="cell"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="class_defaults">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="cell"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="particular_cells">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="cell"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/single_cell_document_02.rnc b/single_cell_document_02.rnc
new file mode 100644
index 0000000..0394c57
--- /dev/null
+++ b/single_cell_document_02.rnc
@@ -0,0 +1,32 @@
+# RELAX NG schema for '.ill' files (class single_cell_document).
+#
+# Copyright (C) 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
+
+# Use file extension '.ill' for single-life xml documents.
+
+start = element single_cell_document
+ {attribute version {"2"}
+ ,attribute data_source {xsd:nonNegativeInteger}
+
+ ,cell_element
+ }
+
+include "cell.rnc"
+
diff --git a/single_cell_document_02.xsd b/single_cell_document_02.xsd
new file mode 100644
index 0000000..e5369d4
--- /dev/null
+++ b/single_cell_document_02.xsd
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
+ <xs:include schemaLocation="cell.xsd"/>
+ <!--
+ RELAX NG schema for '.ill' files (class single_cell_document).
+
+ Copyright (C) 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
+ -->
+ <!-- Use file extension '.ill' for single-life xml documents. -->
+ <xs:element name="single_cell_document">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="cell_element">
+ <xs:attribute name="version" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="2"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="data_source" use="required"
type="xs:nonNegativeInteger"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test_schemata.sh b/test_schemata.sh
index 4bba777..9b6ec2f 100755
--- a/test_schemata.sh
+++ b/test_schemata.sh
@@ -197,6 +197,8 @@ java -jar $jar_dir/trang.jar multiple_cell_document.rnc
multiple_cell_documen
java -jar $jar_dir/trang.jar single_cell_document.rnc
single_cell_document.xsd
java -jar $jar_dir/trang.jar multiple_cell_document_01.rnc
multiple_cell_document_01.xsd
java -jar $jar_dir/trang.jar single_cell_document_01.rnc
single_cell_document_01.xsd
+java -jar $jar_dir/trang.jar multiple_cell_document_02.rnc
multiple_cell_document_02.xsd
+java -jar $jar_dir/trang.jar single_cell_document_02.rnc
single_cell_document_02.xsd
sed -e 's/ *$//' -i ./*.xsd
diff --unified=0 --from-file="$srcdir" ./*.xsd || echo "Dubious '*.xsd' in
repository."
diff --git a/types_08.rnc b/types_08.rnc
new file mode 100644
index 0000000..ec1e3df
--- /dev/null
+++ b/types_08.rnc
@@ -0,0 +1,384 @@
+# RELAX NG schema for custom types.
+#
+# Copyright (C) 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
+
+# This schema is meant not for standalone use, but rather for
+# inclusion from other schemata.
+
+# Default values, unless otherwise specified, are:
+# for strings and input sequences: an empty element
+# for numeric types: zero
+# for enumerative types: the first enumerator listed
+
+# Input sequences. Description:
+# http://www.nongnu.org/lmi/sequence_input.html
+# The regular-expression patterns are generated by this code:
+# http://git.savannah.gnu.org/cgit/lmi.git/plain/regex_test.cpp
+# Inforce data from external systems should generally give a string of
+# semicolon-delimited year-by-year values, e.g.:
+# 1000; 2000; 3000
+# although a simple scalar suffices when historical data don't vary by
+# year.
+
+numeric_sequence = xsd:string {pattern = " *| *(\-?[0-9.]+)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(; *(\-?[0-9.]+)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"}
+payment_sequence = xsd:string {pattern = " *|
*(\-?[0-9.]+|minimum|target|sevenpay|glp|gsp|corridor|table)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(\-?[0-9.]+|minimum|target|sevenpay|glp|gsp|corridor|table)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"}
+mode_sequence = xsd:string {pattern = " *|
*(annual|semiannual|quarterly|monthly)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(annual|semiannual|quarterly|monthly)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"}
+specamt_sequence = xsd:string {pattern = " *|
*(\-?[0-9.]+|maximum|target|sevenpay|glp|gsp|corridor|salary)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(\-?[0-9.]+|maximum|target|sevenpay|glp|gsp|corridor|salary)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"}
+dbo_sequence = xsd:string {pattern = " *| *(a|b|rop)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(; *(a|b|rop)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"}
+
+# Numeric-range types.
+
+## Floating-point number greater than or equal to zero.
+nonnegative_double = xsd:double {minInclusive = "0"
}
+
+## Floating-point number between zero and one, inclusive.
+proportion_double = xsd:double {minInclusive = "0"
maxInclusive = "1" }
+
+## Julian Day Number between 1752-09-14 and 9999-12-31, inclusive.
+calendar_date_int = xsd:nonNegativeInteger {minInclusive = "2361222"
maxInclusive = "5373484"}
+
+## Attained age: integer between zero and 99, inclusive.
+age_int = xsd:nonNegativeInteger {
maxInclusive = "99" }
+
+## Time interval in years: integer between zero and 100, inclusive.
+duration_int = xsd:nonNegativeInteger {
maxInclusive = "100" }
+
+## Time interval in months: integer between zero and eleven, inclusive.
+month_int = xsd:nonNegativeInteger {
maxInclusive = "11" }
+
+# Enumerations.
+
+## 'Yes' or 'No'. 'No' is listed first because it is usually the better
default.
+yes_or_no =
+ "No"
+ | "Yes"
+
+## Gender. 'Unisex' is for contracts that don't distinguish rates by gender.
+gender =
+ "Female"
+ | "Male"
+ | "Unisex"
+
+## Smoking. 'Unismoke' is for contracts that don't distinguish rates
+## by smoking. Some contracts speak of tobacco use instead of smoking,
+## but none use both, so a single set of enumerators suffices.
+smoking =
+ "Smoker"
+ | "Nonsmoker"
+ | "Unismoke"
+
+## Underwriting class. Use "Rated" for contracts with table ratings.
+class =
+ "Preferred"
+ | "Standard"
+ | "Rated"
+ | "Ultra"
+
+## Death benefit option: 'A' = level; 'B' = increasing; 'ROP' = return of
premium.
+dbopt =
+ "A"
+ | "B"
+ | "ROP"
+
+## Payment mode.
+mode =
+ "Annual"
+ | "Semiannual"
+ | "Quarterly"
+ | "Monthly"
+
+## Basis for expense and general-account rates.
+gen_basis =
+ "Current"
+ | "Guaranteed"
+ | "Midpoint"
+
+## Basis for separate-account rates.
+sep_basis =
+ "Hypothetical"
+ | "Zero"
+ | "Half of hypothetical"
+
+## Type of underwriting.
+uw_basis =
+ "Medical"
+ | "Paramedical"
+ | "Nonmedical"
+ | "Simplified issue"
+ | "Guaranteed issue"
+
+## Industry-standard table rating, or 'None'.
+table_rating =
+ "None"
+ | "A=+25%"
+ | "B=+50%"
+ | "C=+75%"
+ | "D=+100%"
+ | "E=+125%"
+ | "F=+150%"
+ | "H=+200%"
+ | "J=+250%"
+ | "L=+300%"
+ | "P=+400%"
+
+## Parameter to be solved for.
+solve_type =
+ "No solve"
+ | "Specified amount"
+ | "Employee premium"
+ | "Employer premium"
+ | "Loan"
+ | "Withdrawal"
+
+## Solve goal.
+solve_target =
+ "Endowment"
+ | "Target CSV"
+ | "Target NAAR"
+ | "CSV = tax basis"
+ | "Avoid MEC"
+
+## Optional strategy to determine payment as a function of specified amount.
+## 'PmtInputScalar' is the default even though it is obsolete.
+## 'PmtMEP' uses 7702A 7PP rate.
+## 'Table' uses an external table (e.g., New York Table D for group insurance).
+pmt_strategy =
+ "PmtInputScalar"
+ | "PmtMinimum"
+ | "PmtTarget"
+ | "PmtMEP"
+ | "PmtGLP"
+ | "PmtGSP"
+ | "PmtCorridor"
+ | "PmtTable"
+
+## Optional strategy to determine specified amount as a function of premium.
+## 'SAInputScalar' is the default even though it is obsolete.
+## 'SAMEP' uses 7702A 7PP rate.
+sa_strategy =
+ "SAInputScalar"
+ | "SAMaximum"
+ | "SATarget"
+ | "SAMEP"
+ | "SAGLP"
+ | "SAGSP"
+ | "SACorridor"
+ | "SASalary"
+
+## General-account rate: before or after spread.
+gen_acct_rate_type =
+ "Credited rate"
+ | "Earned rate"
+
+## Separate-account rate: before or after spread.
+sep_acct_rate_type =
+ "Net rate"
+ | "Gross rate"
+
+## Loan rate: fixed or variable.
+loan_rate_type =
+ "Fixed loan rate"
+ | "Variable loan rate"
+
+## Fund-allocation overrides, for payments that aren't peremptorily
+## allocated to the general account (e.g., employer payments on some
+## group UL contracts might always go into the general account).
+## Conceptually:
+## 'Average': use mean separate-account fee.
+## 'Override': use scalar input separate-account fee.
+## 'Choose': respect input fund allocations.
+## However, there's no GUI for fund allocation yet, so, for the nonce,
+## the meanings in practice are:
+## 'Average': allocate all payments to separate account.
+## 'Choose': allocate all payments to general account.
+## Reason: the GUI, once it exists, will by default allocate all
+## payments to the general account if no separate-account funds are
+## selected.
+fund_input_method =
+ "Average fund"
+ | "Override fund"
+ | "Choose funds"
+
+## Order in which different individuals in a census are processed.
+## By default, illustrations are created independently, in series:
+## one life at a time. Alternatively, all lives may be run together
+## in parallel, which requires more memory but permits them to affect
+## each other, as when individual charges depend on total case assets.
+run_order =
+ "Life by life"
+ | "Month by month"
+
+## Presumed moment of death, for partial mortality.
+survival_limit =
+ "No survival limit"
+ | "Survive to age limit"
+ | "Survive to duration limit"
+ | "Survive to life expectancy"
+
+## Order in which term and base are affected by changes in total
+## specified amount.
+term_adj_method =
+ "Adjust base first"
+ | "Adjust term first"
+ | "Adjust base and term proportionately"
+
+## USPS two-letter abbreviations for the fifty US states, plus
+## 'DC' (District of Columbia)
+## 'PR' (Puerto Rico)
+## and 'XX', a fictitious state used for non-US business.
+state =
+ "AL" | "AK" | "AZ" | "AR" | "CA" | "CO" | "CT" | "DE" | "DC" | "FL"
+ | "GA" | "HI" | "ID" | "IL" | "IN" | "IA" | "KS" | "KY" | "LA" | "ME"
+ | "MD" | "MA" | "MI" | "MN" | "MS" | "MO" | "MT" | "NE" | "NV" | "NH"
+ | "NJ" | "NM" | "NY" | "NC" | "ND" | "OH" | "OK" | "OR" | "PA" | "PR"
+ | "RI" | "SC" | "SD" | "TN" | "TX" | "UT" | "VT" | "VA" | "WA" | "WV"
+ | "WI" | "WY"
+ | "XX"
+
+## International standard country code [ISO 3166-1-Alpha-2 as of 2000-08-21].
+country =
+ "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AN" | "AO" | "AQ"
+ | "AR" | "AS" | "AT" | "AU" | "AW" | "AZ" | "BA" | "BB" | "BD" | "BE"
+ | "BF" | "BG" | "BH" | "BI" | "BJ" | "BM" | "BN" | "BO" | "BR" | "BS"
+ | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG"
+ | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV"
+ | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC"
+ | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM"
+ | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GH" | "GI" | "GL"
+ | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY"
+ | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IN"
+ | "IO" | "IQ" | "IR" | "IS" | "IT" | "JM" | "JO" | "JP" | "KE" | "KG"
+ | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA"
+ | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY"
+ | "MA" | "MC" | "MD" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO"
+ | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY"
+ | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP"
+ | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK"
+ | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE"
+ | "RO" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH"
+ | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "ST" | "SV"
+ | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TM"
+ | "TN" | "TO" | "TP" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG"
+ | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN"
+ | "VU" | "WF" | "WS" | "YE" | "YT" | "YU" | "ZA" | "ZM" | "ZW"
+
+## 7702 definitional test, if any.
+defn_life_ins =
+ "CVAT"
+ | "GPT"
+ | "Not 7702 compliant"
+
+## Special logic, if any, to avoid a MEC. Formerly, another choice
+## tried to avoid a MEC by increasing the specified amount, but that
+## proved unworkable (e.g., because of underwriting).
+mec_avoid_method =
+ "Allow MEC"
+ | "Reduce premium"
+
+## 7702A definition of material change. For the nonce, use
+## "Earlier of" with CVAT, and "adjustment event" with GPT.
+defn_material_change =
+ "Unnecessary premium"
+ | "Benefit increase"
+ | "Later of increase or unnecessary premium"
+ | "Earlier of increase or unnecessary premium"
+ | "GPT adjustment event"
+
+## Inclusive start of a half-open time interval.
+from_point =
+ "Issue"
+ | "Year"
+ | "Age"
+ | "Retirement"
+
+## Exclusive end of a half-open time interval.
+to_point =
+ "Retirement"
+ | "Year"
+ | "Age"
+ | "Maturity"
+
+## Column on optional supplemental report.
+report_column =
+ "[none]"
+ | "AttainedAge"
+ | "PolicyYear"
+ | "InforceLives"
+ | "SpecAmt"
+ | "TermSpecAmt"
+ | "CorridorFactor"
+ | "AnnGAIntRate_Current"
+ | "AnnSAIntRate_Current"
+ | "Outlay"
+ | "EeGrossPmt"
+ | "ErGrossPmt"
+ | "ModalMinimumPremium"
+ | "NetWD"
+ | "NewCashLoan"
+ | "TotalLoanBalance_Current"
+ | "TotalLoanBalance_Guaranteed"
+ | "AcctVal_Current"
+ | "AcctVal_Guaranteed"
+ | "CSVNet_Current"
+ | "CSVNet_Guaranteed"
+ | "EOYDeathBft_Current"
+ | "EOYDeathBft_Guaranteed"
+ | "BaseDeathBft_Current"
+ | "BaseDeathBft_Guaranteed"
+ | "TermPurchased_Current"
+ | "TermPurchased_Guaranteed"
+ | "COICharge_Current"
+ | "COICharge_Guaranteed"
+ | "RiderCharges_Current"
+ | "IrrCsv_Current"
+ | "IrrCsv_Guaranteed"
+ | "IrrDb_Current"
+ | "IrrDb_Guaranteed"
+ | "ExperienceReserve_Current"
+ | "NetClaims_Current"
+ | "NetCOICharge_Current"
+ | "ProjectedCoiCharge_Current"
+ | "KFactor_Current"
+ | "GrossPmt"
+ | "LoanIntAccrued_Current"
+ | "NetDeathBenefit"
+ | "DeathProceedsPaid_Current"
+ | "ClaimsPaid_Current"
+ | "AVRelOnDeath_Current"
+ | "SpecAmtLoad_Current"
+ | "GrossIntCredited_Current"
+ | "NetIntCredited_Current"
+ | "SepAcctCharges_Current"
+ | "PolicyFee_Current"
+ | "AVGenAcct_CurrentZero"
+ | "AVGenAcct_GuaranteedZero"
+ | "AVSepAcct_CurrentZero"
+ | "AVSepAcct_GuaranteedZero"
+ | "AcctVal_CurrentZero"
+ | "AcctVal_GuaranteedZero"
+ | "CSVNet_CurrentZero"
+ | "CSVNet_GuaranteedZero"
+
+## Built-in supplemental illustration.
+suppl_illus_type =
+ "None"
+ | "Bonus"
+ | "Split dollar"
+
diff --git a/types_08.xsd b/types_08.xsd
new file mode 100644
index 0000000..224f73c
--- /dev/null
+++ b/types_08.xsd
@@ -0,0 +1,821 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
+ <!--
+ RELAX NG schema for custom types.
+
+ Copyright (C) 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
+ -->
+ <!--
+ This schema is meant not for standalone use, but rather for
+ inclusion from other schemata.
+ -->
+ <!--
+ Default values, unless otherwise specified, are:
+ for strings and input sequences: an empty element
+ for numeric types: zero
+ for enumerative types: the first enumerator listed
+ -->
+ <!--
+ Input sequences. Description:
+ http://www.nongnu.org/lmi/sequence_input.html
+ The regular-expression patterns are generated by this code:
+ http://git.savannah.gnu.org/cgit/lmi.git/plain/regex_test.cpp
+ Inforce data from external systems should generally give a string of
+ semicolon-delimited year-by-year values, e.g.:
+ 1000; 2000; 3000
+ although a simple scalar suffices when historical data don't vary by
+ year.
+ -->
+ <xs:simpleType name="numeric_sequence">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=" *| *(\-?[0-9.]+)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(; *(\-?[0-9.]+)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="payment_sequence">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=" *|
*(\-?[0-9.]+|minimum|target|sevenpay|glp|gsp|corridor|table)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(\-?[0-9.]+|minimum|target|sevenpay|glp|gsp|corridor|table)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="mode_sequence">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=" *| *(annual|semiannual|quarterly|monthly)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(annual|semiannual|quarterly|monthly)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="specamt_sequence">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=" *|
*(\-?[0-9.]+|maximum|target|sevenpay|glp|gsp|corridor|salary)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(;
*(\-?[0-9.]+|maximum|target|sevenpay|glp|gsp|corridor|salary)(( +| *,
*)(address@hidden *[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="dbo_sequence">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=" *| *(a|b|rop)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *(; *(a|b|rop)(( +| *, *)(address@hidden
*[0-9]+|[a-z]+|[\[\(][^;]+[\]\)]))? *)*;? *"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <!-- Numeric-range types. -->
+ <xs:simpleType name="nonnegative_double">
+ <xs:annotation>
+ <xs:documentation>Floating-point number greater than or equal to
zero.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:double">
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="proportion_double">
+ <xs:annotation>
+ <xs:documentation>Floating-point number between zero and one,
inclusive.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:double">
+ <xs:minInclusive value="0"/>
+ <xs:maxInclusive value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="calendar_date_int">
+ <xs:annotation>
+ <xs:documentation>Julian Day Number between 1752-09-14 and 9999-12-31,
inclusive.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:minInclusive value="2361222"/>
+ <xs:maxInclusive value="5373484"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="age_int">
+ <xs:annotation>
+ <xs:documentation>Attained age: integer between zero and 99,
inclusive.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:maxInclusive value="99"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="duration_int">
+ <xs:annotation>
+ <xs:documentation>Time interval in years: integer between zero and 100,
inclusive.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="month_int">
+ <xs:annotation>
+ <xs:documentation>Time interval in months: integer between zero and
eleven, inclusive.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:maxInclusive value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <!-- Enumerations. -->
+ <xs:simpleType name="yes_or_no">
+ <xs:annotation>
+ <xs:documentation>'Yes' or 'No'. 'No' is listed first because it is
usually the better default.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="No"/>
+ <xs:enumeration value="Yes"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gender">
+ <xs:annotation>
+ <xs:documentation>Gender. 'Unisex' is for contracts that don't
distinguish rates by gender.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Female"/>
+ <xs:enumeration value="Male"/>
+ <xs:enumeration value="Unisex"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="smoking">
+ <xs:annotation>
+ <xs:documentation>Smoking. 'Unismoke' is for contracts that don't
distinguish rates
+by smoking. Some contracts speak of tobacco use instead of smoking,
+but none use both, so a single set of enumerators suffices.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Smoker"/>
+ <xs:enumeration value="Nonsmoker"/>
+ <xs:enumeration value="Unismoke"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="class">
+ <xs:annotation>
+ <xs:documentation>Underwriting class. Use "Rated" for contracts with
table ratings.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Preferred"/>
+ <xs:enumeration value="Standard"/>
+ <xs:enumeration value="Rated"/>
+ <xs:enumeration value="Ultra"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="dbopt">
+ <xs:annotation>
+ <xs:documentation>Death benefit option: 'A' = level; 'B' = increasing;
'ROP' = return of premium.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="A"/>
+ <xs:enumeration value="B"/>
+ <xs:enumeration value="ROP"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="mode">
+ <xs:annotation>
+ <xs:documentation>Payment mode.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Annual"/>
+ <xs:enumeration value="Semiannual"/>
+ <xs:enumeration value="Quarterly"/>
+ <xs:enumeration value="Monthly"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gen_basis">
+ <xs:annotation>
+ <xs:documentation>Basis for expense and general-account
rates.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Current"/>
+ <xs:enumeration value="Guaranteed"/>
+ <xs:enumeration value="Midpoint"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="sep_basis">
+ <xs:annotation>
+ <xs:documentation>Basis for separate-account rates.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Hypothetical"/>
+ <xs:enumeration value="Zero"/>
+ <xs:enumeration value="Half of hypothetical"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="uw_basis">
+ <xs:annotation>
+ <xs:documentation>Type of underwriting.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Medical"/>
+ <xs:enumeration value="Paramedical"/>
+ <xs:enumeration value="Nonmedical"/>
+ <xs:enumeration value="Simplified issue"/>
+ <xs:enumeration value="Guaranteed issue"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="table_rating">
+ <xs:annotation>
+ <xs:documentation>Industry-standard table rating, or
'None'.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="None"/>
+ <xs:enumeration value="A=+25%"/>
+ <xs:enumeration value="B=+50%"/>
+ <xs:enumeration value="C=+75%"/>
+ <xs:enumeration value="D=+100%"/>
+ <xs:enumeration value="E=+125%"/>
+ <xs:enumeration value="F=+150%"/>
+ <xs:enumeration value="H=+200%"/>
+ <xs:enumeration value="J=+250%"/>
+ <xs:enumeration value="L=+300%"/>
+ <xs:enumeration value="P=+400%"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="solve_type">
+ <xs:annotation>
+ <xs:documentation>Parameter to be solved for.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="No solve"/>
+ <xs:enumeration value="Specified amount"/>
+ <xs:enumeration value="Employee premium"/>
+ <xs:enumeration value="Employer premium"/>
+ <xs:enumeration value="Loan"/>
+ <xs:enumeration value="Withdrawal"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="solve_target">
+ <xs:annotation>
+ <xs:documentation>Solve goal.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Endowment"/>
+ <xs:enumeration value="Target CSV"/>
+ <xs:enumeration value="Target NAAR"/>
+ <xs:enumeration value="CSV = tax basis"/>
+ <xs:enumeration value="Avoid MEC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="pmt_strategy">
+ <xs:annotation>
+ <xs:documentation>Optional strategy to determine payment as a function
of specified amount.
+'PmtInputScalar' is the default even though it is obsolete.
+'PmtMEP' uses 7702A 7PP rate.
+'Table' uses an external table (e.g., New York Table D for group
insurance).</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="PmtInputScalar"/>
+ <xs:enumeration value="PmtMinimum"/>
+ <xs:enumeration value="PmtTarget"/>
+ <xs:enumeration value="PmtMEP"/>
+ <xs:enumeration value="PmtGLP"/>
+ <xs:enumeration value="PmtGSP"/>
+ <xs:enumeration value="PmtCorridor"/>
+ <xs:enumeration value="PmtTable"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="sa_strategy">
+ <xs:annotation>
+ <xs:documentation>Optional strategy to determine specified amount as a
function of premium.
+'SAInputScalar' is the default even though it is obsolete.
+'SAMEP' uses 7702A 7PP rate.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="SAInputScalar"/>
+ <xs:enumeration value="SAMaximum"/>
+ <xs:enumeration value="SATarget"/>
+ <xs:enumeration value="SAMEP"/>
+ <xs:enumeration value="SAGLP"/>
+ <xs:enumeration value="SAGSP"/>
+ <xs:enumeration value="SACorridor"/>
+ <xs:enumeration value="SASalary"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gen_acct_rate_type">
+ <xs:annotation>
+ <xs:documentation>General-account rate: before or after
spread.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Credited rate"/>
+ <xs:enumeration value="Earned rate"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="sep_acct_rate_type">
+ <xs:annotation>
+ <xs:documentation>Separate-account rate: before or after
spread.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Net rate"/>
+ <xs:enumeration value="Gross rate"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="loan_rate_type">
+ <xs:annotation>
+ <xs:documentation>Loan rate: fixed or variable.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Fixed loan rate"/>
+ <xs:enumeration value="Variable loan rate"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="fund_input_method">
+ <xs:annotation>
+ <xs:documentation>Fund-allocation overrides, for payments that aren't
peremptorily
+allocated to the general account (e.g., employer payments on some
+group UL contracts might always go into the general account).
+Conceptually:
+'Average': use mean separate-account fee.
+'Override': use scalar input separate-account fee.
+'Choose': respect input fund allocations.
+However, there's no GUI for fund allocation yet, so, for the nonce,
+the meanings in practice are:
+'Average': allocate all payments to separate account.
+'Choose': allocate all payments to general account.
+Reason: the GUI, once it exists, will by default allocate all
+payments to the general account if no separate-account funds are
+selected.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Average fund"/>
+ <xs:enumeration value="Override fund"/>
+ <xs:enumeration value="Choose funds"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="run_order">
+ <xs:annotation>
+ <xs:documentation>Order in which different individuals in a census are
processed.
+By default, illustrations are created independently, in series:
+one life at a time. Alternatively, all lives may be run together
+in parallel, which requires more memory but permits them to affect
+each other, as when individual charges depend on total case
assets.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Life by life"/>
+ <xs:enumeration value="Month by month"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="survival_limit">
+ <xs:annotation>
+ <xs:documentation>Presumed moment of death, for partial
mortality.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="No survival limit"/>
+ <xs:enumeration value="Survive to age limit"/>
+ <xs:enumeration value="Survive to duration limit"/>
+ <xs:enumeration value="Survive to life expectancy"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="term_adj_method">
+ <xs:annotation>
+ <xs:documentation>Order in which term and base are affected by changes
in total
+specified amount.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Adjust base first"/>
+ <xs:enumeration value="Adjust term first"/>
+ <xs:enumeration value="Adjust base and term proportionately"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="state">
+ <xs:annotation>
+ <xs:documentation>USPS two-letter abbreviations for the fifty US states,
plus
+ 'DC' (District of Columbia)
+ 'PR' (Puerto Rico)
+and 'XX', a fictitious state used for non-US business.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="AL"/>
+ <xs:enumeration value="AK"/>
+ <xs:enumeration value="AZ"/>
+ <xs:enumeration value="AR"/>
+ <xs:enumeration value="CA"/>
+ <xs:enumeration value="CO"/>
+ <xs:enumeration value="CT"/>
+ <xs:enumeration value="DE"/>
+ <xs:enumeration value="DC"/>
+ <xs:enumeration value="FL"/>
+ <xs:enumeration value="GA"/>
+ <xs:enumeration value="HI"/>
+ <xs:enumeration value="ID"/>
+ <xs:enumeration value="IL"/>
+ <xs:enumeration value="IN"/>
+ <xs:enumeration value="IA"/>
+ <xs:enumeration value="KS"/>
+ <xs:enumeration value="KY"/>
+ <xs:enumeration value="LA"/>
+ <xs:enumeration value="ME"/>
+ <xs:enumeration value="MD"/>
+ <xs:enumeration value="MA"/>
+ <xs:enumeration value="MI"/>
+ <xs:enumeration value="MN"/>
+ <xs:enumeration value="MS"/>
+ <xs:enumeration value="MO"/>
+ <xs:enumeration value="MT"/>
+ <xs:enumeration value="NE"/>
+ <xs:enumeration value="NV"/>
+ <xs:enumeration value="NH"/>
+ <xs:enumeration value="NJ"/>
+ <xs:enumeration value="NM"/>
+ <xs:enumeration value="NY"/>
+ <xs:enumeration value="NC"/>
+ <xs:enumeration value="ND"/>
+ <xs:enumeration value="OH"/>
+ <xs:enumeration value="OK"/>
+ <xs:enumeration value="OR"/>
+ <xs:enumeration value="PA"/>
+ <xs:enumeration value="PR"/>
+ <xs:enumeration value="RI"/>
+ <xs:enumeration value="SC"/>
+ <xs:enumeration value="SD"/>
+ <xs:enumeration value="TN"/>
+ <xs:enumeration value="TX"/>
+ <xs:enumeration value="UT"/>
+ <xs:enumeration value="VT"/>
+ <xs:enumeration value="VA"/>
+ <xs:enumeration value="WA"/>
+ <xs:enumeration value="WV"/>
+ <xs:enumeration value="WI"/>
+ <xs:enumeration value="WY"/>
+ <xs:enumeration value="XX"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="country">
+ <xs:annotation>
+ <xs:documentation>International standard country code [ISO
3166-1-Alpha-2 as of 2000-08-21].</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="AD"/>
+ <xs:enumeration value="AE"/>
+ <xs:enumeration value="AF"/>
+ <xs:enumeration value="AG"/>
+ <xs:enumeration value="AI"/>
+ <xs:enumeration value="AL"/>
+ <xs:enumeration value="AM"/>
+ <xs:enumeration value="AN"/>
+ <xs:enumeration value="AO"/>
+ <xs:enumeration value="AQ"/>
+ <xs:enumeration value="AR"/>
+ <xs:enumeration value="AS"/>
+ <xs:enumeration value="AT"/>
+ <xs:enumeration value="AU"/>
+ <xs:enumeration value="AW"/>
+ <xs:enumeration value="AZ"/>
+ <xs:enumeration value="BA"/>
+ <xs:enumeration value="BB"/>
+ <xs:enumeration value="BD"/>
+ <xs:enumeration value="BE"/>
+ <xs:enumeration value="BF"/>
+ <xs:enumeration value="BG"/>
+ <xs:enumeration value="BH"/>
+ <xs:enumeration value="BI"/>
+ <xs:enumeration value="BJ"/>
+ <xs:enumeration value="BM"/>
+ <xs:enumeration value="BN"/>
+ <xs:enumeration value="BO"/>
+ <xs:enumeration value="BR"/>
+ <xs:enumeration value="BS"/>
+ <xs:enumeration value="BT"/>
+ <xs:enumeration value="BV"/>
+ <xs:enumeration value="BW"/>
+ <xs:enumeration value="BY"/>
+ <xs:enumeration value="BZ"/>
+ <xs:enumeration value="CA"/>
+ <xs:enumeration value="CC"/>
+ <xs:enumeration value="CD"/>
+ <xs:enumeration value="CF"/>
+ <xs:enumeration value="CG"/>
+ <xs:enumeration value="CH"/>
+ <xs:enumeration value="CI"/>
+ <xs:enumeration value="CK"/>
+ <xs:enumeration value="CL"/>
+ <xs:enumeration value="CM"/>
+ <xs:enumeration value="CN"/>
+ <xs:enumeration value="CO"/>
+ <xs:enumeration value="CR"/>
+ <xs:enumeration value="CU"/>
+ <xs:enumeration value="CV"/>
+ <xs:enumeration value="CX"/>
+ <xs:enumeration value="CY"/>
+ <xs:enumeration value="CZ"/>
+ <xs:enumeration value="DE"/>
+ <xs:enumeration value="DJ"/>
+ <xs:enumeration value="DK"/>
+ <xs:enumeration value="DM"/>
+ <xs:enumeration value="DO"/>
+ <xs:enumeration value="DZ"/>
+ <xs:enumeration value="EC"/>
+ <xs:enumeration value="EE"/>
+ <xs:enumeration value="EG"/>
+ <xs:enumeration value="EH"/>
+ <xs:enumeration value="ER"/>
+ <xs:enumeration value="ES"/>
+ <xs:enumeration value="ET"/>
+ <xs:enumeration value="FI"/>
+ <xs:enumeration value="FJ"/>
+ <xs:enumeration value="FK"/>
+ <xs:enumeration value="FM"/>
+ <xs:enumeration value="FO"/>
+ <xs:enumeration value="FR"/>
+ <xs:enumeration value="GA"/>
+ <xs:enumeration value="GB"/>
+ <xs:enumeration value="GD"/>
+ <xs:enumeration value="GE"/>
+ <xs:enumeration value="GF"/>
+ <xs:enumeration value="GH"/>
+ <xs:enumeration value="GI"/>
+ <xs:enumeration value="GL"/>
+ <xs:enumeration value="GM"/>
+ <xs:enumeration value="GN"/>
+ <xs:enumeration value="GP"/>
+ <xs:enumeration value="GQ"/>
+ <xs:enumeration value="GR"/>
+ <xs:enumeration value="GS"/>
+ <xs:enumeration value="GT"/>
+ <xs:enumeration value="GU"/>
+ <xs:enumeration value="GW"/>
+ <xs:enumeration value="GY"/>
+ <xs:enumeration value="HK"/>
+ <xs:enumeration value="HM"/>
+ <xs:enumeration value="HN"/>
+ <xs:enumeration value="HR"/>
+ <xs:enumeration value="HT"/>
+ <xs:enumeration value="HU"/>
+ <xs:enumeration value="ID"/>
+ <xs:enumeration value="IE"/>
+ <xs:enumeration value="IL"/>
+ <xs:enumeration value="IN"/>
+ <xs:enumeration value="IO"/>
+ <xs:enumeration value="IQ"/>
+ <xs:enumeration value="IR"/>
+ <xs:enumeration value="IS"/>
+ <xs:enumeration value="IT"/>
+ <xs:enumeration value="JM"/>
+ <xs:enumeration value="JO"/>
+ <xs:enumeration value="JP"/>
+ <xs:enumeration value="KE"/>
+ <xs:enumeration value="KG"/>
+ <xs:enumeration value="KH"/>
+ <xs:enumeration value="KI"/>
+ <xs:enumeration value="KM"/>
+ <xs:enumeration value="KN"/>
+ <xs:enumeration value="KP"/>
+ <xs:enumeration value="KR"/>
+ <xs:enumeration value="KW"/>
+ <xs:enumeration value="KY"/>
+ <xs:enumeration value="KZ"/>
+ <xs:enumeration value="LA"/>
+ <xs:enumeration value="LB"/>
+ <xs:enumeration value="LC"/>
+ <xs:enumeration value="LI"/>
+ <xs:enumeration value="LK"/>
+ <xs:enumeration value="LR"/>
+ <xs:enumeration value="LS"/>
+ <xs:enumeration value="LT"/>
+ <xs:enumeration value="LU"/>
+ <xs:enumeration value="LV"/>
+ <xs:enumeration value="LY"/>
+ <xs:enumeration value="MA"/>
+ <xs:enumeration value="MC"/>
+ <xs:enumeration value="MD"/>
+ <xs:enumeration value="MG"/>
+ <xs:enumeration value="MH"/>
+ <xs:enumeration value="MK"/>
+ <xs:enumeration value="ML"/>
+ <xs:enumeration value="MM"/>
+ <xs:enumeration value="MN"/>
+ <xs:enumeration value="MO"/>
+ <xs:enumeration value="MP"/>
+ <xs:enumeration value="MQ"/>
+ <xs:enumeration value="MR"/>
+ <xs:enumeration value="MS"/>
+ <xs:enumeration value="MT"/>
+ <xs:enumeration value="MU"/>
+ <xs:enumeration value="MV"/>
+ <xs:enumeration value="MW"/>
+ <xs:enumeration value="MX"/>
+ <xs:enumeration value="MY"/>
+ <xs:enumeration value="MZ"/>
+ <xs:enumeration value="NA"/>
+ <xs:enumeration value="NC"/>
+ <xs:enumeration value="NE"/>
+ <xs:enumeration value="NF"/>
+ <xs:enumeration value="NG"/>
+ <xs:enumeration value="NI"/>
+ <xs:enumeration value="NL"/>
+ <xs:enumeration value="NO"/>
+ <xs:enumeration value="NP"/>
+ <xs:enumeration value="NR"/>
+ <xs:enumeration value="NU"/>
+ <xs:enumeration value="NZ"/>
+ <xs:enumeration value="OM"/>
+ <xs:enumeration value="PA"/>
+ <xs:enumeration value="PE"/>
+ <xs:enumeration value="PF"/>
+ <xs:enumeration value="PG"/>
+ <xs:enumeration value="PH"/>
+ <xs:enumeration value="PK"/>
+ <xs:enumeration value="PL"/>
+ <xs:enumeration value="PM"/>
+ <xs:enumeration value="PN"/>
+ <xs:enumeration value="PR"/>
+ <xs:enumeration value="PS"/>
+ <xs:enumeration value="PT"/>
+ <xs:enumeration value="PW"/>
+ <xs:enumeration value="PY"/>
+ <xs:enumeration value="QA"/>
+ <xs:enumeration value="RE"/>
+ <xs:enumeration value="RO"/>
+ <xs:enumeration value="RU"/>
+ <xs:enumeration value="RW"/>
+ <xs:enumeration value="SA"/>
+ <xs:enumeration value="SB"/>
+ <xs:enumeration value="SC"/>
+ <xs:enumeration value="SD"/>
+ <xs:enumeration value="SE"/>
+ <xs:enumeration value="SG"/>
+ <xs:enumeration value="SH"/>
+ <xs:enumeration value="SI"/>
+ <xs:enumeration value="SJ"/>
+ <xs:enumeration value="SK"/>
+ <xs:enumeration value="SL"/>
+ <xs:enumeration value="SM"/>
+ <xs:enumeration value="SN"/>
+ <xs:enumeration value="SO"/>
+ <xs:enumeration value="SR"/>
+ <xs:enumeration value="ST"/>
+ <xs:enumeration value="SV"/>
+ <xs:enumeration value="SY"/>
+ <xs:enumeration value="SZ"/>
+ <xs:enumeration value="TC"/>
+ <xs:enumeration value="TD"/>
+ <xs:enumeration value="TF"/>
+ <xs:enumeration value="TG"/>
+ <xs:enumeration value="TH"/>
+ <xs:enumeration value="TJ"/>
+ <xs:enumeration value="TK"/>
+ <xs:enumeration value="TM"/>
+ <xs:enumeration value="TN"/>
+ <xs:enumeration value="TO"/>
+ <xs:enumeration value="TP"/>
+ <xs:enumeration value="TR"/>
+ <xs:enumeration value="TT"/>
+ <xs:enumeration value="TV"/>
+ <xs:enumeration value="TW"/>
+ <xs:enumeration value="TZ"/>
+ <xs:enumeration value="UA"/>
+ <xs:enumeration value="UG"/>
+ <xs:enumeration value="UM"/>
+ <xs:enumeration value="US"/>
+ <xs:enumeration value="UY"/>
+ <xs:enumeration value="UZ"/>
+ <xs:enumeration value="VA"/>
+ <xs:enumeration value="VC"/>
+ <xs:enumeration value="VE"/>
+ <xs:enumeration value="VG"/>
+ <xs:enumeration value="VI"/>
+ <xs:enumeration value="VN"/>
+ <xs:enumeration value="VU"/>
+ <xs:enumeration value="WF"/>
+ <xs:enumeration value="WS"/>
+ <xs:enumeration value="YE"/>
+ <xs:enumeration value="YT"/>
+ <xs:enumeration value="YU"/>
+ <xs:enumeration value="ZA"/>
+ <xs:enumeration value="ZM"/>
+ <xs:enumeration value="ZW"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="defn_life_ins">
+ <xs:annotation>
+ <xs:documentation>7702 definitional test, if any.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="CVAT"/>
+ <xs:enumeration value="GPT"/>
+ <xs:enumeration value="Not 7702 compliant"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="mec_avoid_method">
+ <xs:annotation>
+ <xs:documentation>Special logic, if any, to avoid a MEC. Formerly,
another choice
+tried to avoid a MEC by increasing the specified amount, but that
+proved unworkable (e.g., because of underwriting).</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Allow MEC"/>
+ <xs:enumeration value="Reduce premium"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="defn_material_change">
+ <xs:annotation>
+ <xs:documentation>7702A definition of material change. For the nonce, use
+"Earlier of" with CVAT, and "adjustment event" with GPT.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Unnecessary premium"/>
+ <xs:enumeration value="Benefit increase"/>
+ <xs:enumeration value="Later of increase or unnecessary premium"/>
+ <xs:enumeration value="Earlier of increase or unnecessary premium"/>
+ <xs:enumeration value="GPT adjustment event"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="from_point">
+ <xs:annotation>
+ <xs:documentation>Inclusive start of a half-open time
interval.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Issue"/>
+ <xs:enumeration value="Year"/>
+ <xs:enumeration value="Age"/>
+ <xs:enumeration value="Retirement"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="to_point">
+ <xs:annotation>
+ <xs:documentation>Exclusive end of a half-open time
interval.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="Retirement"/>
+ <xs:enumeration value="Year"/>
+ <xs:enumeration value="Age"/>
+ <xs:enumeration value="Maturity"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="report_column">
+ <xs:annotation>
+ <xs:documentation>Column on optional supplemental
report.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="[none]"/>
+ <xs:enumeration value="AttainedAge"/>
+ <xs:enumeration value="PolicyYear"/>
+ <xs:enumeration value="InforceLives"/>
+ <xs:enumeration value="SpecAmt"/>
+ <xs:enumeration value="TermSpecAmt"/>
+ <xs:enumeration value="CorridorFactor"/>
+ <xs:enumeration value="AnnGAIntRate_Current"/>
+ <xs:enumeration value="AnnSAIntRate_Current"/>
+ <xs:enumeration value="Outlay"/>
+ <xs:enumeration value="EeGrossPmt"/>
+ <xs:enumeration value="ErGrossPmt"/>
+ <xs:enumeration value="ModalMinimumPremium"/>
+ <xs:enumeration value="NetWD"/>
+ <xs:enumeration value="NewCashLoan"/>
+ <xs:enumeration value="TotalLoanBalance_Current"/>
+ <xs:enumeration value="TotalLoanBalance_Guaranteed"/>
+ <xs:enumeration value="AcctVal_Current"/>
+ <xs:enumeration value="AcctVal_Guaranteed"/>
+ <xs:enumeration value="CSVNet_Current"/>
+ <xs:enumeration value="CSVNet_Guaranteed"/>
+ <xs:enumeration value="EOYDeathBft_Current"/>
+ <xs:enumeration value="EOYDeathBft_Guaranteed"/>
+ <xs:enumeration value="BaseDeathBft_Current"/>
+ <xs:enumeration value="BaseDeathBft_Guaranteed"/>
+ <xs:enumeration value="TermPurchased_Current"/>
+ <xs:enumeration value="TermPurchased_Guaranteed"/>
+ <xs:enumeration value="COICharge_Current"/>
+ <xs:enumeration value="COICharge_Guaranteed"/>
+ <xs:enumeration value="RiderCharges_Current"/>
+ <xs:enumeration value="IrrCsv_Current"/>
+ <xs:enumeration value="IrrCsv_Guaranteed"/>
+ <xs:enumeration value="IrrDb_Current"/>
+ <xs:enumeration value="IrrDb_Guaranteed"/>
+ <xs:enumeration value="ExperienceReserve_Current"/>
+ <xs:enumeration value="NetClaims_Current"/>
+ <xs:enumeration value="NetCOICharge_Current"/>
+ <xs:enumeration value="ProjectedCoiCharge_Current"/>
+ <xs:enumeration value="KFactor_Current"/>
+ <xs:enumeration value="GrossPmt"/>
+ <xs:enumeration value="LoanIntAccrued_Current"/>
+ <xs:enumeration value="NetDeathBenefit"/>
+ <xs:enumeration value="DeathProceedsPaid_Current"/>
+ <xs:enumeration value="ClaimsPaid_Current"/>
+ <xs:enumeration value="AVRelOnDeath_Current"/>
+ <xs:enumeration value="SpecAmtLoad_Current"/>
+ <xs:enumeration value="GrossIntCredited_Current"/>
+ <xs:enumeration value="NetIntCredited_Current"/>
+ <xs:enumeration value="SepAcctCharges_Current"/>
+ <xs:enumeration value="PolicyFee_Current"/>
+ <xs:enumeration value="AVGenAcct_CurrentZero"/>
+ <xs:enumeration value="AVGenAcct_GuaranteedZero"/>
+ <xs:enumeration value="AVSepAcct_CurrentZero"/>
+ <xs:enumeration value="AVSepAcct_GuaranteedZero"/>
+ <xs:enumeration value="AcctVal_CurrentZero"/>
+ <xs:enumeration value="AcctVal_GuaranteedZero"/>
+ <xs:enumeration value="CSVNet_CurrentZero"/>
+ <xs:enumeration value="CSVNet_GuaranteedZero"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="suppl_illus_type">
+ <xs:annotation>
+ <xs:documentation>Built-in supplemental illustration.</xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="None"/>
+ <xs:enumeration value="Bonus"/>
+ <xs:enumeration value="Split dollar"/>
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>