Technical Notes#

Status: Draft, 2026-08-03 (all cited sources accessed 2026-08-03).

Scope note: these notes standardize a liability cash flow projection model for the representative GUL product defined in product-spec.md (same directory). They use the same representative parameter values as the specification. Tags: [S#]/[R#] cite _research/guaranteed-ul.md; [REG-R#] cites the cross-product reference library references/regulatory-and-actuarial-references.md (research provenance: _research/regulatory-actuarial.md, same R-numbering); std marks standardizations introduced for the reference implementation; unverified flags facts the research file could not verify from a retrieved document.


Model scope and conventions#

  • Product: flexible-premium UL, level death benefit only, single shadow-account secondary guarantee (AG 38 8E Policy Design #1 R1; VM-01 shadow-account definition R2). The cumulative-premium-test variation is handled by a documented swap (see “Cumulative-premium variation”).

  • Base chassis: the monthiversary processing order and the NAAR discount convention (DB discounted one month at the guaranteed rate, floored at zero) follow the universal-life reference notes (products/universal_life/technical-notes.md); the shadow account runs the same recursion with its own parameter set. Documented deviation std: these notes measure the account value for the NAAR after the expense charges but before COI (the UL base measures AV before the entire monthly deduction) — immaterial at the modeled charge levels, but kept explicit for reconciliation.

  • Projection frequency: monthly, on policy monthiversaries, from issue (or in-force date) to attained age 121, at which point charges and premiums cease and coverage continues [S7]. Maximum projection length: (121 − issue age) × 12 months from issue, less duration_months for an in-force model point.

  • Time index std: t is 0-based and counts policy months from the projection start: t = 0 is the first projected month — the issue month of a new-business model point, or the month following duration_months completed months for an in-force one — and policy month t runs from monthiversary t to monthiversary t + 1. The frame is t = 0, 1, …, proj_len 1 with proj_len = (121 issue_age)·12 duration_months the number of projected months. Completed policy months at the start of month t are duration_months + t; the policy year is the 1-based contractual label (duration_months + t) // 12 + 1; and the contractual policy month number is duration_months + t + 1 (1 in the issue month), which is what the surrender charge schedule counts. Attained age is issue_age + (duration_months + t) // 12. The opening balances of a model point (av_init, sg_init, loan_init, cumprem_init) are the values carried into the start of t = 0; every closing balance AV_t, SG_t, L_t, CumPrem_t is the value at the end of month t, and l_0 = 1 is the in-force at the start of t = 0.

  • Timing std: monthiversary (BOM) processing — premium receipt, expense charges, COI deduction in that order at the start of the policy month; interest credited over the month; decrements (death, lapse/surrender, ROP exercise) at end of month (EOM) after interest. Deaths are processed before lapses at EOM.

  • Age basis: age nearest birthday (ANB) std — chosen because the sourced products underwrite on ANB [S2], [S4], [S6] and the 2017 CSO / 2015 VBT are published in ANB variants REG-R17, REG-R18. Attained age advances on policy anniversaries.

  • Model points: single-policy model points; results are expected (probability- weighted) cash flows per policy in force at projection start. No stochastic decrement simulation in the base model std.

  • Rate conversions std: annual effective interest i → monthly factor (1+i)^(1/12). Contractual COI: monthly rate per $1,000 = annual q per $1,000 / 12 (simple-twelfth; see “Pitfalls”). Experience decrements: monthly rate = 1 − (1 − annual rate)^(1/12).

  • Currency/rounding: USD; internal calculations unrounded, cash flows reported to the cent std.

Model point attributes#

Attribute

Type

Example (used throughout these notes)

policy_id

str

“GUL-000001”

issue_age

int (ANB)

60

sex

enum {M, F}

M

risk_class

enum (4 NT + 2 T classes [S4])

NT Standard

face_amount

float (≥ 100,000 [S4], [S6])

500,000

guarantee_age

int in [90, 121] [S1], [S2], [S9]

121 (lifetime)

premium_pattern

enum {level, single_pay, ten_pay} std

level

annual_premium

float — solved no-lapse premium P* for level pattern

10,800.00 std (illustrative solve output)

premium_mode

enum {A, S, Q, M-EFT} [S2]

A

duration_months

int — elapsed policy months at projection start

300

av_init

float — base account value at projection start

2,400.00

sg_init

float — shadow account value at projection start

118,000.00

loan_init

float

0.00

rop_elected

bool (built-in endorsement [S1])

True

Premium pattern is a first-class model point attribute because funding pattern drives both MEC status R5 and observed lapse behavior (higher lapses for level-pay, lower for single-pay R8; premium persistency study basis REG-R21).

State variables#

Variable

Meaning

Opening value (carried into the start of t = 0)

t

policy month index, 0-based from the projection start (0, 1, …, proj_len − 1); completed policy months at the start of month t are duration_months + t

first row t = 0

AV_t

base account value, EOM of month t, floored at 0

av_init (read as AV_{t−1} when t = 0)

SG_t

shadow account value, EOM, NOT floored (negative = catch-up shortfall)

sg_init (read as SG_{t−1} when t = 0)

L_t

loan balance including accrued interest, EOM

loan_init (read as L_{t−1} when t = 0)

DB_t

death benefit = max(F, κ(x_t)·max(AV_t’, 0)) [S2, S4; R4 corridor]

l_t

in-force probability at BOM of month t (survivorship from all decrements)

l_0 = 1.0

g_t

grace-period counter, months (0 = not in grace) [S7]

0 (read as g_{t−1} when t = 0)

D_t

monthly deduction forgone because AV = 0 under active guarantee

CumPrem_t

cumulative premiums paid after the premium of month t (drives ROP refund [S1] and MEC testing R5)

cumprem_init, per model point (read as CumPrem_{t−1} when t = 0)

SC_t

surrender charge = 18/1000 · F · max(0, (180 − n_t)/180), n_t = duration_months + t + 1 the contractual policy month number std

C_t

catch-up premium required to restore guarantee = max(0, −(SG_t − L_t))/(1 − π^g) std

Every recursion below is written for a general month t with the previous month’s closing values on its right-hand side; at t = 0 those are the opening values in the last column, so the first projected month is an ordinary row and nothing is defined at t = −1.

Assumption inputs#

The model distinguishes three assumption classes. Class (a) is contractual and fixed; class (b) is a snapshot of insurer-declared scales; class (c) is behavioral/experience and belongs to the assumption-governance layer (see REG-R25 for governance patterns; ASOP 2 governs insurer NGE determination itself REG-R26).

(a) Contractual / guaranteed elements (from the specification)#

Element

Value

Basis

Base premium load π

25%

[S3], [S7]

Base per-policy charge

$5.50/month to age 121

[S3], [S7]

Base per-unit charge

$0.20 per $1,000 initial face /month

std (spec note)

Guaranteed max COI

2017 CSO sex/smoker-distinct ANB, monthly = annual/12

std structure; R3 (stated maxima required); REG-R17

Guaranteed credited rate

2.0% annual effective

[S3], [S5], [S7]

Shadow premium load π^g

8%

std

Shadow credited rate i^g

5.5% annual effective (guaranteed)

std; AG 38 8E cap context R1

Shadow COI

55% of 2017 CSO maximum

std

Shadow per-unit charge

$0.05 per $1,000 initial face /month; no per-policy charge

std

Loan rates

5.0% charged in arrears / 3.0% credited on loaned AV, guaranteed

[S4]

Surrender charge

15-year linear schedule, $18/$1,000 initial level

std (spec note)

ROP endorsement

50% of CumPrem at anniversary 20, 100% at 25; cap 40% of face; 60-day windows

[S1]; [S3], [S4] (windows)

Grace period

61 days

[S7]

(b) Current non-guaranteed scales (insurer-declared snapshot)#

Element

Value

Basis

Current COI scale

65% of guaranteed maximum, all durations

std (spec note; scales not published — research Gaps)

Current credited rate i^c

3.5% annual effective

std (spec note)

Current loan credited rate

3.0% (= guaranteed [S4])

[S4]

The base model holds current scales level for the projection std; re-rating logic (current scales moving within guaranteed bounds) is out of scope but the guaranteed bounds above define the admissible envelope R3; REG-R26.

(c) Behavioral / experience assumptions#

Assumption

Recommended public basis

Reference model values

Best-estimate mortality

2015 VBT primary tables (sex/smoker-distinct, ANB) REG-R18, with company A/E positioning informed by the ILEC 2012–2019 study REG-R19

100% of 2015 VBT std

Mortality improvement

1.0%/yr to attained age 85, grading linearly to 0% at 95, applied for max 20 years std

Base lapse (annual)

SOA/LIMRA UL lapse studies: 2009–2013 persistency update REG-R20; 2015–2021 UL lapse/surrender study (R7; REG-R21)

Policy year 1: 4.0%; 2: 3.0%; 3: 2.5%; 4–5: 2.0%; 6–10: 1.5%; 11–20: 1.0%; 21+: 0.75% std (looked up by the 1-based policy year (duration_months + t) // 12 + 1)

Lifetime-guarantee lapse multiplier

Lifetime-SG lapse rates are 45% lower than non-lifetime-SG rates (count and amount bases, 2015–2021) R7

0.55 × base at all durations when guarantee_age = 121 std (level derived from the R7 finding; duration shape std)

Dynamic lapse

63% of surveyed ULSG writers use dynamic lapse; lapse and tail investment returns rated the most critical ULSG assumptions R8

formulas below, std

Premium persistency

2015–2021 UL premium persistency study REG-R21; premium-pattern-dependent lapse R8

level-pay: scheduled premium paid with 98% annual probability, missed premiums not made up std; single-pay/ten-pay: as scheduled

ROP exercise

no public study in research file

5% of eligible in-force exercise in the year-20 window; 10% in the year-25 window std

Loan/withdrawal utilization

0 in the base model point std (sensitivity only)

Maintenance expense

$75/policy/year, inflated 2.5%/yr std

Acquisition expense

year 1: $300/policy + 90% of first-year premium (commissions + issue) std

Claim expense

$300 per death std

The detailed duration-by-duration ULSG lapse tables sit in the paid SOA/LIMRA Standard Data Package R7; all lapse levels above are therefore std shapes anchored to the public highlights findings.


Cash flow components and recursions#

Notation (defined once, used throughout)#

Symbol

Meaning

F

face amount

P_t

premium received at BOM of month t (0 in non-premium months); a scheduled premium falls due when duration_months + t is a multiple of 12 / (payments per year), so at t = 0 for a new-business point

π, π^g

base (0.25) and shadow (0.08) premium loads

e_pol

per-policy charge, $5.50/month

e_u, e_u^g

per-unit charges: 0.20 and 0.05 per $1,000 initial face /month

m_t^max

guaranteed max monthly COI rate per $1,000 (2017 CSO annual/12)

m_t = 0.65·m_t^max

current monthly COI rate per $1,000

m_t^g = 0.55·m_t^max

shadow monthly COI rate per $1,000

j_c, j_g, j^g

monthly factors − 1 for current 3.5%, guaranteed 2.0%, shadow 5.5%: 0.0028709, 0.0016516, 0.0044717

NAAR_t

base net amount at risk

AV_t', AV_t''

base AV after premium+expenses; after COI

SG_t', SG_t''

shadow analogues

W_t

withdrawal amount (plus $25 fee)

q_t^d, w_t

monthly best-estimate death and lapse rates (converted from annual)

l_t

in-force probability at BOM of month t, l_0 = 1

x_t

attained age (ANB) in month t, issue_age + (duration_months + t) // 12

κ(x)

GPT corridor factor at attained age x R4; REG-R13

Monthly processing order std#

  1. Status check. If g_{t−1} > 0 (in grace) and cumulative grace ≥ 61 days without the required payment, the policy lapses at BOM with no value (CSV 0 in grace by construction) [S7]. Never at t = 0: g_{t−1} is read as the opening value 0.

  2. Premium. CumPrem_t = CumPrem_{t−1} + P_t, with CumPrem_{t−1} read as cumprem_init when t = 0. Base credit (1 π)·P_t; shadow credit (1 π^g)·P_t. (Catch-up premiums route identically std.)

  3. Expense charges. AV_t' = AV_{t−1} + (1−π)P_t e_pol e_u·F/1000 W_t 25·1{W_t>0} SG_t' = SG_{t−1} + (1−π^g)P_t e_u^g·F/1000 W_t (withdrawal reduces shadow dollar-for-dollar std, spec note), with AV_{t−1} and SG_{t−1} read as av_init and sg_init when t = 0.

  4. Death benefit and NAAR. DB_t = max(F, κ(x_t)·max(AV_t',0)); NAAR_t = max(DB_t/(1+j_g) max(AV_t', 0), 0); NAAR_t^g = max(DB_t/(1+j^g) max(SG_t', 0), 0) std (discount convention; the account inputs are floored at zero so that a deficit — AV in the guarantee-support regime, SG in catch-up territory — never inflates NAAR above the discounted DB).

  5. COI. COI_t = m_t · NAAR_t/1000; COI_t^g = m_t^g · NAAR_t^g/1000. AV_t'' = AV_t' COI_t; SG_t'' = SG_t' COI_t^g.

  6. Insufficiency handling (the low-AV regime). If AV_t'' < 0:

    • if the guarantee is active (SG_t'' L_{t−1} > 0): set D_t = −AV_t'', AV_t'' = 0. The forgone deduction D_t is NOT a receivable — the insurer funds the negative “account” economics; coverage continues with AV = 0 and NAAR DB [S2, S3, S9 guarantee behavior; accounting treatment std].

    • else: enter/continue grace, g_t = g_{t−1} + 1; required grace payment = amount curing the deduction shortfall std.

  7. Interest. Unloaned base AV grows at j_c (floor j_g); loaned AV at the loaned credited monthly rate (3.0% annual [S4]): AV_t = AV_t''·(1+j_c) (split loaned/unloaned when L > 0). SG_t = SG_t''·(1+j^g) — no floor at zero.

  8. Loan interest. L_t = L_{t−1}·(1 + (1.05)^{1/12} 1) (5% in arrears [S4], accrued monthly std; L_{t−1} is loan_init when t = 0).

  9. In-force test. Guarantee active iff SG_t L_t > 0 [S4; S2, S9]. The policy is in force iff (base account can cover deductions, i.e., not in expired grace) OR the guarantee is active. Lapse occurs ONLY if all three hold: (i) base AV net of charges failed (step 6 else-branch), (ii) SG_t L_t 0, (iii) the 61-day grace expires without cure [S7; S2, S9 mechanics; conjunction std].

  10. Catch-up requirement. C_t = max(0, −(SG_t L_t))/(1 π^g) std; paying C_t restores SG L to 0⁺ and the guarantee with it [S7; R1 ex. 7].

  11. Decrements (EOM), deaths first. With monthly rates q_t^d then w_t applied to l_t:

    • death CF: l_t·q_t^d·(DB_t L_t) + claim expense

    • surrender CF: l_t·(1−q_t^d)·w_t·CSV_t, CSV_t = max(AV_t SC_t L_t, 0)

    • ROP exercise (window months only): rate w^ROP std, benefit min(ρ·CumPrem_t, 0.40·F) L_t, ρ ∈ {50%, 100%} [S1]; exercise is a full surrender [S1], [S3].

    • l_{t+1} = l_t·(1−q_t^d)·(1−w_t)·(1−w_t^ROP), from l_0 = 1

  12. Age/duration update: t t + 1; the attained age steps when duration_months + t + 1 reaches a multiple of 12. At attained age 121 all charges and premiums cease, recursion continues with COI = expenses = P = 0 and interest only [S7]; the last projected month, t = proj_len 1, is the last month of attained age 120.

Cash flow outputs (per month, expected per initial policy)#

  • Premium income: l_t·φ_t·P_t where φ_t = premium persistency probability (class (c)).

  • Death claims: as step 11 (net of loan repayment from proceeds — standard UL treatment std; see spec, “Loans”).

  • Surrender/ROP benefits: as step 11.

  • Expenses: acquisition (the issue month, duration_months + t = 0, and 90% of the premiums of policy year 1), maintenance /12 monthly, claim expense.

  • Loan cash flows (drawdown/repayment): 0 in base model point std.

  • Internal transfers (loads, COI, expense charges, interest credits, shadow-account entries) are NOT external cash flows; they drive AV, CSV and the in-force test only. This is the gross-liability convention of the library std.

Funding-premium solve (level no-lapse premium P*)#

Objective: the smallest level annual premium such that the guarantee never fails before the elected guarantee age:

g(P) = min over t = 0, 1, …, (guarantee_age − issue_age)·12 − duration_months − 1
       of (SG_t(P) − L_t)
P*   = min { P : g(P) > 0 }

The stopping time counts projected months on the same 0-based t as the projection: (guarantee_age issue_age)·12 months from issue, less the months already elapsed.

SG_t(P) is monotone non-decreasing in P (every premium enters the shadow account at (1 π^g) and accumulates at i^g net of charges that do not increase with P while DB = F; at extreme funding levels a corridor-driven DB increase would raise shadow COI, so cap the search domain at the guideline premium limitation R4, inside which the corridor does not bind for this thin-AV design), so g is monotone and bisection is safe on that domain std:

  1. Bracket: P_lo = 0 (g < 0 for any nontrivial guarantee), P_hi = the premium that funds the guarantee as a single-pay net single premium on shadow parameters (guaranteed sufficient); double P_hi until g(P_hi) > 0.

  2. Bisect on g(P) > 0 to tolerance $0.01 of annual premium std; ~40 iterations. A secant step on g accelerates convergence near the root; fall back to bisection when the secant iterate leaves the bracket std.

  3. Full-projection evaluation of g per iterate (steps 1–12 with decrements off — the solve is contractual, not behavioral std).

Shorter guarantee ages solve the same way with the earlier stopping time; single-pay and n-pay premiums solve identically over their premium vectors.

Calibration std#

No public document discloses shadow-account parameters (research Gaps). The std shadow parametrization (π^g = 8%, i^g = 5.5%, COI^g = 55% CSO, $0.05/unit) is calibrated so that solved level lifetime premiums fall in the range of observed market premiums for lifetime GUL. The research file records competitive positioning but no premium tables [S2]; the calibration target is therefore itself a standardization, and implementations should re-calibrate against current market quotes before using outputs comparatively. The illustrative solve output used in these notes (P* = $10,800 for male 60 NT Standard, $500,000, lifetime) is std.

Cumulative-premium variation (main design alternative)#

To model the cumulative-premium-test design R1 8E Design #2; S4 initial NLG; S5: replace SG_t with the pair (CumPrem_t^net, ReqPrem_t), where CumPrem_t^net = Σ premiums Σ withdrawals L_t [S4] and ReqPrem_t is the contractual required accumulated premium schedule; guarantee active iff CumPrem_t^net ReqPrem_t [S4], [S5]. All other machinery (grace, catch-up = the schedule shortfall, solve on the required schedule) is unchanged. Note the harsher observed loan treatment in this family: one design voids the guarantee entirely on any loan [S5].


Policyholder behavior modeling#

All dynamic formulas are std; the empirical anchors are R7 (lifetime-SG lapse 45% lower), R8 (dynamic lapse used by 63% of writers; premium-pattern dependence; median 40% of policies assumed sustained by the guarantee after 31 years in tail scenarios) and REG-R20/REG-R21 (public study bases).

Total monthly lapse: w_t = min(0.5, b(d) · G · Φ(pattern) · Ψ_t) /12-converted, where b(d) is the base annual table (class (c)), and:

  • G (guarantee-duration factor): 0.55 if guarantee_age = 121 [R7-anchored], 1.0 otherwise std.

  • Φ (premium pattern): single-pay 0.6; ten-pay 0.8; level 1.0 std (direction per R8: higher lapses for level-pay, lower for single-pay).

  • Ψ_t (funding-status dynamic factor) std:

    • guarantee active and AV > 0: 1.0

    • guarantee active and AV = 0 (pure guarantee support): 0.6 — the policy is deep in the money to the policyholder; empirical anchor: sustained-by-guarantee fractions in tail scenarios R8

    • guarantee terminated (SG L 0) and policy surviving on AV: 2.0 (shock)

    • annual floor after the dynamic factor: 0.3% std

  • ROP windows: additional exercise rates 5% (year-20 window) / 10% (year-25 window) std applied as full surrenders at the window months; rationale: the 100% refund dominates CSV for a thin-AV product, but exercising forfeits a now-cheap guarantee, so observed exercise should stay modest. No public exercise study was found (research file has none).

  • Premium persistency: level-pay premiums paid with annual probability 98% std; a missed premium permanently reduces SG trajectory (no automatic catch-up); catch-up behavior is not modeled in the base run std.

Anti-selective interaction: mortality of lapsers vs. persisters is NOT adjusted in the base model std (no selective-lapse load); this understates claims if healthy lives disproportionately lapse or exercise ROP — flagged under model risks.


Worked example std (all figures illustrative)#

Model point: male 60 ANB NT Standard, F = $500,000, lifetime guarantee, level P* = $10,800 paid annually; an in-force model point with duration_months = 300, so the projection’s first five months t = 0 4 are policy months 301–305 (policy year 26, attained age 85, anniversary premium at t = 0). The table carries both labels: t is the projection index and the policy month is duration_months + t + 1. Illustrative COI rates at age 85: guaranteed max monthly m^max = 8.615 per $1,000 std; current m = 5.60 (65%); shadow m^g = 4.74 (55%). Monthly interest factors: base current 1.0028709; shadow 1.0044717. Opening (carried into the start of t = 0): AV = 2,400.00; SG = 118,000.00; L = 0. Deductions column = expenses + COI. Decrements are suppressed for clarity (contract-mechanics view).

t

Policy month

Prem

Base net prem

Base deductions

Base int.

AV (EOM)

Shdw net prem

Shdw deductions

Shdw int.

SG (EOM)

Status

0

301

10,800.00

8,100.00

2,842.68

21.98

7,679.30

9,936.00

1,778.15

564.13

126,721.98

in force

1

302

0

0

2,858.47

13.84

4,834.67

0

1,783.90

558.66

125,496.74

in force

2

303

0

0

2,874.40

5.63

1,965.90

0

1,789.71

553.16

124,260.19

in force

3

304

0

0

2,890.47 → 1,965.90 taken; 924.57 forgone

0.00

0.00

0

1,795.57

547.62

123,012.24

in force — guarantee

4

305

0

0

2,900.89 forgone (AV = 0)

0.00

0.00

0

1,801.49

542.01

121,752.76

in force — guarantee

Reading the table: the base account exhausts at t = 3 (policy month 304) — monthly deductions (~$2,900, dominated by COI on a ~$497K NAAR) exceed the annual net premium spread over the year, and the residual $924.57 of that month’s deductions is forgone by the insurer (D_3), not carried as a receivable. The policy does NOT enter grace: the shadow account, charged at the lighter std shadow parameter set and credited at 5.5%, stands at ~$123K, so the in-force test SG L > 0 holds and coverage continues with NAAR DB = $500,000. From t = 4 (policy month 305) onward the insurer is funding the full mortality cost of the guarantee — the “negative account economics” regime that dominates late-duration GUL liability cash flows. Arithmetic: net premium = P × (1 − load); deductions = per-policy 5.50 + per-unit 100.00 + COI m·NAAR/1000 (base; shadow analogues 0/25.00/m^g·NAAR^g/1000); NAAR = 499,176 − max(AV′, 0) (base — the floor binds at t = 4, where AV′ = −105.50 but COI is charged on the full 499,176 NAAR), 497,774 − SG′ (shadow; SG′ > 0 throughout); interest = balance after deductions × monthly factor − 1. Independent recomputation may differ by cents due to rounding.


Valuation and reserve pointers#

This library projects gross liability cash flows; reserve layers consume those cash flows and are cited, not reproduced:

  • VM-20 (PBR, post-2017 issues): ULSG is its own reserving category; reserve = NPR floor plus excesses of deterministic (DR) and stochastic (SR) reserves. The ULSG NPR during the SG period is the greater of a non-SG amount and min(ASG/FFSG, 1)·NSP E with the amortized expense allowance (x1 = level gross premium; y2–5 = 10% of it; z1 = $2.50/$1,000) and the prescribed funding-ratio-driven lapse L = R·1% + (1−R)·0.5%·r R2. Note the model’s SG_t IS the “actual secondary guarantee” (ASG) input, and the fully-funded value FFSG is a backward solve on the same shadow recursion R2. See also the Academy practice note R9; REG-R23 and the Valuation Manual itself REG-R3. Material-SG business cannot use the life PBR exemption R2; R9.

  • AG 38 / A-830 (pre-PBR issues and in-force): the formulaic layer underneath AG 38 is now sourced at first hand. A-830 ¶¶29–32 — not “Section 7”; the AP&P print is a flat ¶¶1–32 with no Sections — makes the basic reserve the segmented reserve over the secondary guarantee period computed on specified (else minimum) premiums with no unitary leg, the ¶22 deficiency on the same substitution, and a floor at the greater of that sum and an unnamed “other appendices governing universal life plans” limb; several unexpired guarantees are valued stand-alone and the greatest taken REG-R154 ¶¶29–32. A-830’s own basic reserves, deficiency comparator and maximum valuation interest rates are cross-references into A-820 ¶¶11–13, ¶¶19–20 and ¶¶7–10 REG-R153. On top of that, AG 38 supplies what A-830 contains nothing of: funding-ratio interpolation between basic+deficiency reserves and the net single premium for the guarantee, prescribed lapse caps and surrender-charge offsets; Section 8E Method I defines minimum gross premiums off this very shadow recursion R1; REG-R6; REG-R7.

  • Reserve financing: Model 787 / AG 48 Primary Security requirements are VM-20-based (greater of DR and NPR; greatest of DR/SR/NPR if the stochastic exclusion fails) R6; REG-R11; REG-R12.

  • Tax reserves: greater of net surrender value and 92.81% of the NAIC-method reserve, capped at statutory REG-R16.

  • Professional standards: ASOP 52 (PBR work) R10; REG-R31; ASOP 7 (cash flow analysis) REG-R27; ASOP 56 (model governance — applies to this reference implementation itself) REG-R32.

Key sensitivities and model risks#

Dominant assumptions (in order):

  1. Lapse. First-order by a wide margin: GUL is lapse-supported. Every lapse of a funded guarantee releases the insurer from a deeply in-the-money claim; lifetime-SG experience already runs 45% below non-lifetime SG R7, insurers rate lapse among the two most critical tail assumptions, and the median tail assumption keeps 40% of policies in force purely on the guarantee after 31 years R8. PV of claims is convex in the ultimate lapse rate near zero — sensitivity runs must include ultimate lapse 0% std recommendation.

  2. Mortality level and improvement at high attained ages. With NAAR DB for decades in the guarantee-support regime, claims PV moves nearly linearly with 85+ mortality; improvement assumptions compound REG-R18, REG-R19 bases.

  3. Premium persistency / funding pattern mix. Single-pay vs. level-pay changes both the guarantee trajectory and lapse behavior R8; REG-R21; a 98% vs. 100% payment probability materially shifts guarantee failure times for exactly-funded level payers std observation.

  4. ROP exercise. Exercise at the 100% window is an option against the insurer whose cost depends on cumulative premiums vs. reserve released; mis-set exercise rates distort years 20–26 cash flows [S1 design; rates std].

Known modeling pitfalls:

  • NAAR discount convention. DB/(1+j_g) vs. DB un-discounted changes COI by ~0.17% per month at 2%; be consistent between base and shadow accounts and against any carrier illustration being matched std convention here.

  • Monthly COI conversion. annual/12 vs. 1−(1−q)^(1/12) differs materially at ages 85+ (q > 0.10); this model fixes annual/12 std — do not mix.

  • Flooring. AV floors at 0 only while the guarantee is active; SG never floors (its negative part is the catch-up requirement). Flooring SG at 0 destroys the catch-up computation and misprices restoration R1 ex. 7 logic.

  • Forgone deductions are not receivables. D_t must not accrue against future premiums or AV recoveries std; treating it as a receivable understates the guarantee cost.

  • Order of tests. Run the guarantee test AFTER the full monthly deduction attempt; testing before deductions lets a policy lapse a month early (or late) and shifts claim timing at exactly the durations where NAAR ≈ DB.

  • ANB/ALB mismatch. 2017 CSO and 2015 VBT each exist in ANB and ALB variants REG-R17, REG-R18; this model is ANB throughout std — a mixed basis shifts COI and expected claims by up to half a year of mortality.

  • Guarantee-age grid. The solve target SG > 0 strictly; a 0 target with monthly grids can leave the guarantee failing on the final monthiversary.

  • Shadow parameters are standardized. All shadow-account parameters are std calibrations, not observed contract values (research Gaps: no specimen policy form retrieved; no carrier publishes shadow parameters). Conclusions that depend on the shadow parametrization (funding ratios, catch-up costs, VM-20 ASG/FFSG inputs) carry that calibration risk.

  • Out-of-model features. 7702/7702A testing (GPT premium limits, MEC status R4, R5), terminal-illness acceleration (treated as CF-neutral std), selective-lapse mortality adjustment, and NGE re-rating are not modeled in the base run; each is a documented extension point.