lmi-commits
[Top][All Lists]
Advanced

[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&amp;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>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]