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.
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) |
|---|---|---|
|
str |
“GUL-000001” |
|
int (ANB) |
60 |
|
enum {M, F} |
M |
|
enum (4 NT + 2 T classes S4) |
NT Standard |
|
500,000 |
|
|
121 (lifetime) |
|
|
enum {level, single_pay, ten_pay} std |
level |
|
float — solved no-lapse premium P* for level pattern |
10,800.00 std (illustrative solve output) |
|
enum {A, S, Q, M-EFT} S2 |
A |
|
int — elapsed policy months at projection start |
300 |
|
float — base account value at projection start |
2,400.00 |
|
float — shadow account value at projection start |
118,000.00 |
|
float |
0.00 |
|
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 |
Initial value |
|---|---|---|
|
policy month index (1, 2, …) |
|
|
base account value, EOM, floored at 0 |
|
|
shadow account value, EOM, NOT floored (negative = catch-up shortfall) |
|
|
loan balance including accrued interest |
|
|
death benefit = max(F, κ(x_t)·AV_t) S2, S4; R4 corridor |
— |
|
in-force probability (survivorship from all decrements) |
1.0 |
|
grace-period counter, months (0 = not in grace) S7 |
0 |
|
monthly deduction forgone because AV = 0 under active guarantee |
0 |
|
cumulative premiums paid (drives ROP refund S1 and MEC testing R5) |
per model point |
|
surrender charge = 18/1000 · F · max(0, (180 − t)/180) std |
— |
|
catch-up premium required to restore guarantee = max(0, −(SG_t − L_t))/(1 − π^g) std |
0 |
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% |
|
Base per-policy charge |
$5.50/month to age 121 |
|
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 |
|
Guaranteed credited rate |
2.0% annual effective |
|
Shadow premium load π^g |
8% |
|
Shadow credited rate i^g |
5.5% annual effective (guaranteed) |
|
Shadow COI |
55% of 2017 CSO maximum |
|
Shadow per-unit charge |
$0.05 per $1,000 initial face /month; no per-policy charge |
|
Loan rates |
5.0% charged in arrears / 3.0% credited on loaned AV, guaranteed |
|
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 |
|
Grace period |
61 days |
(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) |
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) |
Duration 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 |
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 |
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 |
|---|---|
|
face amount |
|
premium received at BOM of month t (0 in non-premium months) |
|
base (0.25) and shadow (0.08) premium loads |
|
per-policy charge, $5.50/month |
|
per-unit charges: 0.20 and 0.05 per $1,000 initial face /month |
|
guaranteed max monthly COI rate per $1,000 (2017 CSO annual/12) |
|
current monthly COI rate per $1,000 |
|
shadow monthly COI rate per $1,000 |
|
monthly factors − 1 for current 3.5%, guaranteed 2.0%, shadow 5.5%: 0.0028709, 0.0016516, 0.0044717 |
|
base net amount at risk |
|
base AV after premium+expenses; after COI |
|
shadow analogues |
|
withdrawal amount (plus $25 fee) |
|
monthly best-estimate death and lapse rates (converted from annual) |
|
in-force probability at BOM of month t |
|
GPT corridor factor at attained age x R4; REG-R13 |
Monthly processing order std#
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 ≤ 0in grace by construction) S7.Premium.
CumPrem_t = CumPrem_{t−1} + P_t. Base credit(1 − π)·P_t; shadow credit(1 − π^g)·P_t. (Catch-up premiums route identically std.)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).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).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.Insufficiency handling (the low-AV regime). If
AV_t'' < 0:if the guarantee is active (
SG_t'' − L_{t−1} > 0): setD_t = −AV_t'',AV_t'' = 0. The forgone deductionD_tis NOT a receivable — the insurer funds the negative “account” economics; coverage continues withAV = 0andNAAR ≈ DB[S2, S3, S9 guarantee behavior; accounting treatment std](#uslib-guaranteed_ul-s2).else: enter/continue grace,
g_t = g_{t−1} + 1; required grace payment = amount curing the deduction shortfall std.
Interest. Unloaned base AV grows at
j_c(floorj_g); loaned AV at the loaned credited monthly rate (3.0% annual S4):AV_t = AV_t''·(1+j_c)(split loaned/unloaned whenL > 0).SG_t = SG_t''·(1+j^g)— no floor at zero.Loan interest.
L_t = L_{t−1}·(1 + (1.05)^{1/12} − 1)(5% in arrears S4, accrued monthly std).In-force test. Guarantee active iff
SG_t − L_t > 0S4; 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](#uslib-guaranteed_ul-s7).Catch-up requirement.
C_t = max(0, −(SG_t − L_t))/(1 − π^g)std; payingC_trestoresSG − Lto 0⁺ and the guarantee with it S7; R1 ex. 7.Decrements (EOM), deaths first. With monthly rates
q_t^dthenw_tapplied tol_t:death CF:
l_t·q_t^d·(DB_t − L_t)+ claim expensesurrender 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^ROPstd, benefitmin(ρ·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)
Age/duration update; at attained age 121 all charges and premiums cease, recursion continues with
COI = expenses = P = 0and interest only S7.
Cash flow outputs (per month, expected per initial policy)#
Premium income:
l_t·φ_t·P_twhereφ_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 (month 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,CSVand the in-force test only. This is the gross-liability convention of the library std.
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.
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 ifguarantee_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
SGtrajectory (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; projection months 301–305 (policy year 26, attained age
85, anniversary premium in month 301). 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: AV = 2,400.00; SG = 118,000.00; L = 0. Deductions column =
expenses + COI. Decrements are suppressed for clarity (contract-mechanics view).
Mo. |
Prem |
Base net prem |
Base deductions |
Base int. |
AV (EOM) |
Shdw net prem |
Shdw deductions |
Shdw int. |
SG (EOM) |
Status |
|---|---|---|---|---|---|---|---|---|---|---|
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 |
302 |
0 |
0 |
2,858.47 |
13.84 |
4,834.67 |
0 |
1,783.90 |
558.66 |
125,496.74 |
in force |
303 |
0 |
0 |
2,874.40 |
5.63 |
1,965.90 |
0 |
1,789.71 |
553.16 |
124,260.19 |
in force |
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 |
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 in 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 month-304 deductions is forgone by the
insurer (D_304), 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 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 in month 305, 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 − Ewith the amortized expense allowance (x1 = level gross premium; y2–5 = 10% of it; z1 = $2.50/$1,000) and the prescribed funding-ratio-driven lapseL = R·1% + (1−R)·0.5%·rR2. Note the model’sSG_tIS 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):
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.
Mortality level and improvement at high attained ages. With
NAAR ≈ DBfor decades in the guarantee-support regime, claims PV moves nearly linearly with 85+ mortality; improvement assumptions compound REG-R18, REG-R19 bases.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.
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](#uslib-guaranteed_ul-s1).
Known modeling pitfalls:
NAAR discount convention.
DB/(1+j_g)vs.DBun-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.
AVfloors at 0 only while the guarantee is active;SGnever floors (its negative part is the catch-up requirement). FlooringSGat 0 destroys the catch-up computation and misprices restoration R1 ex. 7 logic.Forgone deductions are not receivables.
D_tmust not accrue against future premiums orAVrecoveries 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 > 0strictly; a≥ 0target 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.