Technical Notes#
Status: Draft, 2026-09-03 (all cited sources accessed 2026-09-03).
Scope note. These notes turn the standardized composite children’s insurance
(eorini boheom, 어린이보험) of product-spec.md (same directory) into a reference
liability cash-flow projection on paper, and then into Child_KR_S beside it. They
describe no single insurer’s contract. [S#] and [R#] tags resolve against sources.md,
whose numbering is carried verbatim from _research/child.md and is frozen; [REG-R#] tags
resolve against the cross-product reference library
references/regulatory-and-actuarial-references.md, whose own R-numbering is separate and
also frozen. std marks a standardization introduced for the reference implementation,
always with a rationale and, where one exists, the observed range across insurers;
unverified marks a claim that could not be confirmed against a retrieved document.
Every contractual parameter these notes share with product-spec.md carries the same
value there, and every number in the worked example is read off the shipped model
rather than recomputed by hand.
What these notes add, and product-spec.md does not carry because none of it is
contractual, is the whole modelling basis: the foetal-loss rate over the pre-birth
months; the eleven-cause incidence grid and its severity parameters; the length-of-day
basis of the two hospital-cash limbs; the nine-limb 태아 module with its frequencies
and its expected paid days; the 계약자’s disability-to-mortality ratio, which is what
turns a mortality table into a waiver decrement on a second life; the lapse curve; the
expense and commission scales; and the notional 보험가입금액 that lets a product with
no death benefit enter the 표준해약공제액 formula at all. Every one of them is introduced
below as std, with the direction of the error it carries.
Deltas against the 정액 제3보험 chassis#
The cancer 정액 chassis (암보험) specifies, once, the machinery this product inherits: a diagnosis-triggered lump sum on a tier ladder, the 90일 면책기간 (myeonchaek gigan, waiting period) before invasive cover attaches, the 감액기간 (gamaek gigan, reduced-benefit period) sitting on top of it as a second and softer anti-selection device, the 유사암 (yusaam, borderline and in-situ cancer) reduced tier at a stated fraction of the general amount, the premium waiver correlated with the diagnosis, and the 계약자적립액 (gyeyakja jeongnipaek, the policyholder’s account balance) paid on a death the contract does not cover. It also settles, for the whole library, the surrender-value regime of 감독규정 제7-65조 to 제7-70조, which 제7-69조 and 제7-70조 apply to 장기손해보험 and to 제3보험 mutatis mutandis REG-R19. None of that is restated here.
Nine things change, and the first two have no counterpart in uslib, uklib, jplib,
frlib or delib.
태아가입 (taea gaip, foetal enrolment) — the contract is written before the insured exists. A 태아 (taea, foetus) has no legal personality and cannot be the 피보험자 of an 인보험 contract, so the 태아가입특칙 makes the foetus the insured at birth: 「제53조의 태아는 출생시에 피보험자가 됩니다」 [S8 제54조] R3. The projection therefore opens on a life that does not yet exist. Months
t = 0tot = b − 1carry premium income on three streams, the pre-birth limbs of the 태아 module, no mortality and no morbidity on the insured at all, and a void decrement rather than a lapse one — 유산 or 사산 makes the contract 무효 and every premium paid is returned [S8 제56조] [S9].born(t)gates every cover on the child’s own life andcheck_cover_at_birth()asserts the gate. The chassis has no such state and no such decrement.보험료 납입면제 (boheomnyo naip myeonje, premium waiver) on the 계약자 (gyeyakja, the policyholder) — a premium-waiver decrement on a life who is not the insured. The chassis waives on the insured’s own first invasive diagnosis. Here the waiver fires on the child’s trigger set or on the policyholder’s death or 50% 이상 장해: 「보험료 납입기간 중 가입자녀가 암으로 진단확정되거나 … 또는 계약자가 사망 또는 … 장해지급률이 50% 이상인 장해상태가 되었을 때에는 차회 이후의 보험료 납입을 면제하여 드립니다」 [S10 제22조제1항]. It is lawful in one clause because that wording makes the 피보험자 of the contract 「계약자와 가입자녀」 [S10 제3조]. So the model carries two decrement lives and the premium stream stops on the earlier of two events drawn from two different rows of one mortality table. On the 손해보험 chassis the same economics arrive instead as a compulsory 부양자 death rider on the parent’s own life [S5] [S11] — a benefit, not a decrement — and modelling one as the other is wrong in both level and shape.
Both of the chassis’s anti-selection devices are switched off, and by supervisory action rather than by drafting taste. The 90-day 면책기간 is disapplied below 보험나이 15 — 「최초계약과 부활계약의 면책기간은 보험나이 15세 이상인 경우에만 적용」 [S3], and 「보장개시일(계약일로부터 90일이 지난날의 다음날, 계약일 현재 보험나이 15세 미만 피보험자의 경우 1회 보험료를 받은 때)」 [S11] — and entirely on a 태아가입용 cover [S3]. The 감액기간 was removed from foetal contracts by a 변경권고 of 2015-06-17 across 17 carriers and 56 products R2. The test is applied at the 계약일 and not at the claim date, so a contract issued at 계약나이 0 has no cancer waiting period at any point in its hundred-year life, including the eighty-five years in which the insured is an adult.
waiting_mths = 0andreduction_mths = 0on the anchor cell.Thirteen benefit limbs, not four, and the largest is a day benefit. The chassis is a diagnosis product with care limbs bolted on. This one is a bundled stack on the 손해보험협회 comparison basis R12 — a 상해후유장해 기본계약 and its 질병 twin, four diagnosis limbs, a 수술비, two hospital-cash limbs, 골절 and 화상, a liability rider and a 태아 module. Over the whole projection
claims_hospitalis 47.0% of morbidity outgo andclaims_diagnosis26.6%; on the chassis those proportions are reversed.A third-party liability cover, which only a non-life licence may write. 가족일상생활 배상책임 is the one limb whose claim is a third party’s loss rather than a state of the insured R5 [S5]. It is a 3년만기 갱신형 block inside a 비갱신형 core [S2] whose 누수사고 limb carries a 90-day 보장개시일 resetting at every renewal [S5] [S3] — the only place in this model where the 갱신형 mechanic has a cash consequence.
Two ages, and on a foetal contract the offset is exact. The chassis projects on 만나이 with a std half-year offset against 보험나이. Here the model carries both:
age(t)is 보험나이 andage_man(t)is 만나이, and on a 태아 contract 「보험금 지급기준표에서 적용하는 피보험자 나이는 피보험자가 출생한 날부터 계산합니다」 [S8 제58조] while 「계약일에 있어서의 피보험자의 계약나이는 0세로 합니다」 [S8 제60조], so the two differ by exactlybirth_month()months for the life of the contract. The contract expires when the insured is 99 years and 7 months old, not 100.The 표준형 (pyojunhyeong, the standard surrender-value form) is the base run, not the 무해지 (muhaeji, no-surrender-value) form.
Cancer_KR_Sships the 미지급형, which is where the market is.Child_KR_Sdeliberately ships the 표준형: the 적립부분 credited at the 공시이율 exists only there — the suppressed forms are 순수보장성 and show 「-」 for it on the board [S11] [S2] — and the 표준형’s surrender value exceeds premiums paid from about year 30 on the published grid [S2], a shape no otherkrlibprotection product produces and only a hundred-year term can. Model points 4 and 5 carry the suppressed forms.The notional 보험가입금액 is computed, not assumed. The chassis stands in a
notional_sa_ratioof 0.60 for the [별표 15] 제9호 ratio it cannot evaluate REG-R21. Here it is evaluated: 제9호 reads 보험가입금액 = (위험보험료 ÷ 정기보험의 위험보험료) × 정기보험의 보험가입금액, and a term policy’s risk premium per unit of face is its mortality rate, so the notional amount is the first policy year’s risk premium divided by the mortality rate at the 기준연령 요건, 남자 만 40세 REG-R9 제1-2조제2호. At a child ageqis so small that the [별표 14] formula limb exceeds thirty-six years of premium; at 40 it is still 56.25 months of core premium, so on this product it never binds and the 표준해약공제액 is the REG-R29 reading of the same cap — 13 months, ₩364,000.00 — of which the 90% the model deducts is 11.70 months.The horizon. At 계약나이 0 to a 100세 만기 the projection runs 1,200 monthly periods —
t = 0 … 1,199, plus the terminal 계약해당일 row att = 1,200— the longest inkrlib, with premium over the first 240. Eighty of the hundred years are paid-up and they decide the contract: 89.4% of all outgo falls aftert = 240, against nil premium.
The long-term care technical notes (간병보험) state
their own deltas against the same chassis. The indemnity medical technical notes
(실손의료보험) share nothing with it but the
제3보험 statutory class — and are the reason this product has no indemnity limb at all:
from April 2018 실손의료보험 must be sold as a standalone product of indemnity-medical cover
only, under 감독규정 제7-63조제2항제1호 as amended 2017-03-22 R9 R10 REG-R17. A Korean
family buys the indemnity layer as Medical_KR_S and the fixed-benefit layer as
Child_KR_S, as two contracts, and the split is statutory rather than a modelling choice.
Model scope and conventions#
Purpose. Project gross best-estimate liability cash flows for a single-policy model point of 어린이보험: office premium on three streams; the 상해후유장해 기본계약 and its 질병 twin; four diagnosis lump sums; the 수술비; two hospital-cash limbs; 골절 and 화상; the 가족일상생활배상책임 rider; the nine-limb 태아 module; the 계약자적립액 plus 미경과보험료 paid on a death the contract does not cover; the 해약환급금 plus 미경과보험료 paid on surrender; the refund of every premium on a pre-birth void; maintenance and claim-handling expense; and commission. Undiscounted and gross of reinsurance. Korea runs three measurement bases over one such stream and all three are live: IFRS 17 (K-IFRS 제1117호, mandatory since 2023-01-01) REG-R60, K-ICS from the same quarter REG-R13, and the 해약환급금준비금, which has no counterpart anywhere else in this repository REG-R11. Discounting, the risk adjustment, the CSM, 요구자본 and every reserve are out of scope and are cited, not reproduced — see Valuation and reserve pointers.
Projection frequency. Monthly grid, and monthly by construction. Four of the product’s mechanics live on it: 월납 is the mode every published premium in the file is quoted on R12 [S11]; birth falls on a month boundary, which is what makes the pre-birth period a whole number of grid steps; the 태아 module’s 1년만기 신생아 block is twelve of them; and the 납입최고 window is operated as a calendar-month one, 「납입기일 다음날부터 납입기일이 속하는 달의 다음달 마지막 날까지」 [S8].
tis the policy month and is 0-based, on the library-wide convention:t = 0is the first projected month, monthtis the interval fromttot + 1months after the 계약일, the contractual (1-based) policy year containing it ispolicy_year(t) = t // 12 + 1, and the frame ist = 0, 1, …, proj_len − 1.proj_len()is the number of projected months — the exclusive end of the frame.proj_len = 12 × (term_age − issue_age) + 1, so 1,201 on the anchor cell and 1,201 rows inresult_cf(), indexedt = 0 … 1,200. Throughout these notesn = proj_len − 1is the terminal 계약해당일 index,12 × (term_age − issue_age)= 1,200 on the anchor cell: the 1,200 months of the 보험기간 aret = 0 … 1,199and montht = nis the 100세 계약해당일 itself, where every cash flow is zero,pols_maturityrecords the cover ending, andclaims(t, "MATURITY")is 0.0000 — there is no 만기환급금 on the protection part [S1] [S2] and the shipped 환급률 progression reaches zero at 만기.Two ages, and which one does what. The contract’s clock is 보험나이 (boheom nai, insurance age): 「계약일 현재 피보험자의 실제 만 나이를 기준으로 6개월 미만의 끝수는 버리고 6개월 이상의 끝수는 1년으로 하여 계산하며, 이후 매년 계약해당일에 나이가 증가」, identical in both 표준약관, reproduced verbatim by every carrier, with the worked example 생년월일 1988-10-02 / 계약일 2014-04-13 ⇒ 25년 6월 11일 ⇒ 26세 R8 [S7 제27조] [S8 제30조] [S12 제30조] REG-R25 제21조.
age(t) = issue_age + t // 12is that clock and it governs the premium, the 갱신형 anniversary and the 보험나이 15 thresholds; the registered age basis for this model is 보험나이, deliberately, because on a foetal contract it is the only age defined att = 0. Every decrement table is nonetheless read at 만나이,age_man(t) = issue_age_man + (t − b) // 12, because every public series they are built from is published on it REG-R38 REG-R39 REG-R40 REG-R41 and no source supplies the distribution of issue dates a conversion would need. On an ordinary contract the offset is taken as zero std; on a 태아 contract it is exactlybmonths, andage_man(t) = −1before birth because the insured does not exist.Timing conventions std. Office premium and maintenance expense at the start of month
t; every morbidity benefit, the 계약자적립액 on death, the 해약환급금 on lapse, the premium refund on a pre-birth void and the claim-handling expense at the end of montht; decrements at the end of montht, in the order void, waiver, mortality, lapse. Acquisition expense and initial commission att = 0.Cover attaches at birth. This is not a timing convention but a contractual one, and it was enforced: in July 2016 sixteen carriers and nineteen products were ordered to stop advertising 「태아 때부터 보장」, 「엄마 뱃속에서부터 보장」 and 「태어나기 전부터 보장」 under 감독규정 제4-35조제3항 R2. The one carve-out is the 태아보장기간 itself, whose limbs pay from the date of birth even where the insured event preceded it [S8 제59조] — which is why they are gated by
t == brather than byborn(t), and tested separately bycheck_neonatal_term().Model points. One policy at a time, on an expected (probability-weighted) basis.
Projectionis parameterized bypoint_id; no aggregation logic is specified here. Ten points are shipped and every one satisfies everycheck_*()cells.Termination. Cover to the 100세 계약해당일. Four exits and not two: the pre-birth void, death, lapse, and maturity. Paying a benefit neither terminates nor exhausts the contract; the
frac_openledgers exhaust a cover and not the policy.Contract boundary. The core covers are 비갱신형, level-premium and 무배당 with no insurer repricing right [S1] [S2] [S12] REG-R12, so every future premium and benefit on them is inside the boundary and the horizon is the whole term. The 갱신형 blocks — 가족일상생활배상책임 at 3년만기 [S2], and named riders at one to three years [S3] [S5] — reprice at attained age at each renewal, which would ordinarily close the boundary there.
krlibprojects them to final expiry and records the tension rather than resolving it, exactly asTerm_KR_S,Cancer_KR_SandMedical_KR_Sdo. It is a K-IFRS 1117 question REG-R60 this model does not answer.Currency. KRW throughout. There is no minor unit in the contract, but expected values are fractional; displayed to the precision each table states.
Rounding. Intermediates at full double precision. The worked example displays
pols_ifand every policy count to ten decimals and every cash flow to four. Monthly rows rounded for display do not re-add to the displayed totals; the totals are sums of unrounded values.What this model is not. It is a mechanics demonstration. The office premium is a model-point input, every incidence rate but one is a std construction, and the expense and commission scales are std throughout. Replace the assumption tables with company data before drawing any conclusion from the output.
Model point attributes#
Attribute |
Type |
Anchor cell ( |
|---|---|---|
|
str |
CH-KR-0001 |
|
enum {M, F} |
M — priced male because the sex is unknown at issue |
|
int, 보험나이, 0–15 (태아 = 0) |
0 |
|
0/1 — 태아가입 |
1 |
|
int policy months, 0 unless |
5 |
|
int, 만기 보험나이 ∈ {30, 100, 110} |
100 |
|
int years |
20 |
|
KRW/month, office, model-point input |
28,000 std |
|
KRW/month, 태아 module, 전기납 |
3,000 std |
|
enum {std, susp, graded} |
std (표준형) |
|
suppressed form’s post-완납 fraction |
1.0 (inert on |
|
0/1 — the child’s 납입면제 |
1 |
|
0/1 — the 계약자’s 납입면제 module |
1 |
|
int, 만나이 of the 계약자 at the 계약일 |
33 std |
|
enum {M, F} |
M |
|
기본계약 일반상해후유장해, KRW |
100,000,000 (1억원) |
|
질병후유장해, KRW |
10,000,000 (1천만원) |
|
암(유사암 제외) / 유사암, KRW |
10,000,000 / 2,000,000 |
|
뇌출혈 / 급성심근경색증, KRW |
10,000,000 / 10,000,000 |
|
수술비 per named-disease operation, KRW |
5,000,000 (500만원) |
|
입원일당 per day, 1~180일 basis, KRW |
40,000 (4만원) |
|
골절진단비 / 화상진단비, KRW |
400,000 / 200,000 |
|
가족일상생활배상책임 per occurrence, KRW |
100,000,000 (1억원) |
|
the 태아 module’s own 가입금액, KRW |
10,000,000 |
|
0/1 — broad 뇌혈관질환 / 허혈성심장질환 definitions |
0 |
|
면책기간 in months |
0 |
|
감액기간 in months ∈ {0, 12} |
0 |
|
the 2026 저출산 discount R6 |
0 / 0 |
|
enum {loglinear, disclosed, flat} |
loglinear |
|
multiplier from table to best estimate |
1.0 |
Derived scalars on the anchor cell, all read off the shipped model:
Cells |
Value |
|---|---|
|
1201 |
|
240 / 239 |
|
17 / 16 |
|
1.0 |
|
145,537.04939942522 |
|
132,306,408.54493201 |
|
252,000.0 |
|
20 |
[별표 14] formula limb (does not bind) |
1,575,064.08544932 |
|
364,000.0 |
|
84 months |
|
327,600.0 |
|
11.7 |
|
212,940.0 |
|
47,000.0 / 63,450.0 |
premium_mth is an input, not a computed quantity. No Korean carrier publishes a rate
table by age and duration: a carrier’s own 적용위험률 and 예정사업비율 live in the 산출방법서,
an undisclosed 기초서류 REG-R2, and the bureau’s 참조순보험요율 is filed with the FSC under
보험업법 제176조제4항 with no general obligation to publish REG-R4 — and the 장기손해보험
display that is published under 제176조제9항 carries risk rates, not office premiums
REG-R61. What is published is a specimen
premium per product on a standardised basis — 보험나이 5세, 상해 1급, 100세만기 20년납, 월납,
the 보장보험료 of the compulsory covers only R12 — and on that nominally standardised
basis the observed levels vary by a factor of seven, ₩21,502 to ₩148,250 for a male
five-year-old, because carriers include different compulsory sets in the quoted figure [S11].
₩27,000 is the tight cluster of the three mid-market carriers whose compulsory sets are
closest to R12’s — ₩26,841, ₩26,999 and ₩27,480 [S11] — and the anchor cell adds ₩1,000
for the 계약자 waiver module, one carrier publishing that waiver as a benefit in its own
right at a 가입금액 of ₩100,000 [S11]. Nothing in this model depends on ₩28,000 being a
market rate. equiv_premium_mth_pp() computes the premium the shipped basis implies and,
per product-spec.md, where the two differ these notes’ figure governs: on the anchor
cell it is ₩31,079.59, which is 11.00% above the shipped premium.
The 태아 module’s premium is a second stream, and it is a real feature of the contract.
「계약체결일부터 출생시점(출산 또는 분만 과정에서 보험금 지급사유가 발생하는 경우 포함)
까지의 기간을 보험기간으로 하여 아래의 보험기간 및 보험료 납입기간을 추가로 부가
합니다」 [S2], written elsewhere as a fixed 「1~10월만기 전기납 태아 월납」 sub-term [S1]. It
is 전기납 and payable monthly in advance, so a term ending at t = 17 collects in months 0
to 16, giving an office premium of ₩31,000 to t = 16 and ₩28,000 from t = 17 to
t = 239.
State variables#
Variable |
Description |
Updated |
|---|---|---|
|
In force at the start of month |
monthly recursion |
|
In force with the premium waived, on either life; |
monthly recursion |
|
|
derived |
|
Policies whose waiver fires in month |
derived |
|
Contracts de-recognised in month |
derived |
|
The other three exits |
derived |
|
Probability that a policy in force at |
monthly recursion |
|
Cumulative scheduled core office premium per policy, at time |
derived |
|
Cumulative 태아 module premium per policy, at time |
derived |
|
환급률 of the notional 표준형 at time |
derived |
|
The notional 표준형 해약환급금; the amount this form actually pays — both at time |
derived |
|
Unamortised 해약공제액 at time |
derived |
|
계약자적립액 per policy at time |
derived |
|
Attained 보험나이; attained 만나이, |
annually |
|
|
derived |
|
Annual mortality of the insured (zero before birth) and of the 계약자 |
lookup |
|
The three behavioural decrements |
lookup |
|
Net cash flow of month |
monthly |
Every state variable here is a time-point value at time t, not a closing balance of
period t. cum_prem_pp, prem_foetal_paid_pp, refund_ratio, cv_std_pp, cv_pp,
surr_chg_pp and av_pp are read at time t (t = 0 at the 계약일), that is at the start
of month t and before that month’s premium: cum_prem_pp(0) = 0, av_pp(0) = 0, and
twelve instalments stand at t = 12; surr_chg_pp is full at t = 0 and nil at t = 84.
The counts pols_if, pols_pay and pols_waived are likewise at the start of month t.
The four exit payments of month t fall at its end and are valued on those
start-of-month quantities std — see Processing order below.
Two compartments, not three, and not one. The chassis needs three in-force states because
a 특정소액암 life is diagnosed, keeps paying and carries excess mortality. This product needs
two, and for a different reason: the waiver moves a policy from pols_pay to
pols_waived without changing pols_if, because cover continues in full — 「보장보험료
납입이 면제되며」, and payment of the 적립보험료 stops as well [S2]. A waived life carries the
same morbidity and the same mortality as a paying one; what it does not carry is lapse.
A policy paying nothing has nothing to lapse for, and no retrieved wording describes a
voluntary surrender out of a waived state; the treatment is std and is the one the
sister libraries use for a waived or claiming cohort. check_waiver_split() asserts
pols_pay + pols_waived = pols_if in every month, which is what says the second decrement
life has been carried without leaking policies into or out of the projection.
The void is a fourth exit and it is not a lapse. 「태아가 유산 또는 사산에 의해 출생하지
못한 경우에는 계약을 무효로 합니다 … 이미 납입한 보험료를 돌려드립니다」 [S8 제56조]
[S9]. Nothing is retained, the contract is de-recognised rather than terminated, and the cash
flow is a refund of premiums already collected — the whole of both streams — rather than
a surrender value. Netting it into the lapse column would hide a decrement and mis-state the
cash flow that goes with it, and on the anchor cell it would mis-state it by the full
premium: claims_void(4) is ₩122.13 against a cv_pp(4) of nil. It has its own
decrement, its own "VOID" claim kind and its own column.
The frac_open ledgers are per policy, not per block. Each diagnosis benefit is 최초
1회한 [S1] [S2] [S11], so the exposed population is not the in-force block but the part of it
whose benefit line is still open. frac_open(t+1, j) = frac_open(t, j) × (1 − i_j,m(t)),
with incidence taken as independent of the exit decrements std. Weighting the ledger by
pols_if would measure the block’s consumption rather than the individual’s and defer the
exhaustion forever. On this product the quantity is worth watching in a way it is not on the
chassis: paediatric cancer incidence is two orders of magnitude below the adult rate, so the
general-tier ledger is almost untouched for thirty years and then drains fast — from
frac_open(120, cancer) = 0.9987524571 at age 10 to 0.4023261296 at the 100세 계약해당일.
Nearly 60% of the general-tier line has been used by the end of the term, and that is
what a level premium on a 100세만기 child policy has to fund.
Three absences are product facts, not gaps. There is no death benefit and the
prohibition is statutory — 상법 제732조 makes a contract on the death of a person under 만
15세 void R7 REG-R50, 표준약관 제19조제2호 restates it and 제19조제3호 refuses to extend
the age-correction saving to it R8 REG-R25 — so claims_death is the 계약자적립액 plus
the 미경과보험료 and not a sum assured. There is no 만기환급금, so claims_maturity is
a column of zeros, published rather than dropped because the residual 적립부분 is a real
quantity on a contract whose term ends earlier. And there is no 실손 limb of any kind,
which is a regulatory fact and not a design choice R9 R10.
Assumption inputs#
(a) Contractual / guaranteed elements (cited; the insurer cannot change them)#
Input |
Value |
Basis |
|---|---|---|
태아가입특칙 — the insured |
「태아는 출생시에 피보험자가 됩니다」 |
[S8 제54조]; [S9 제45조]; R3 |
Cover attachment |
At birth, not at the 계약일; sixteen carriers ordered in 2016 to stop advertising otherwise |
R2; 감독규정 제4-35조제3항 |
유산 / 사산 |
The contract is 무효 and every premium paid is returned |
[S8 제56조]; [S9 제47조] |
계약나이 of a foetus |
0세 at the 계약일 |
[S8 제60조] |
Benefit-scale age of a foetus |
Runs from the date of birth |
[S8 제58조] |
Late birth |
Where birth falls more than six months after the 계약일 the 계약일 is moved back to six months before it and premiums and reserves re-set |
[S8 제61조] |
Pre-birth insured event |
Paid, but from the date of birth |
[S8 제59조] |
태아보장기간 |
계약체결일 ~ 출생시점, an additional 보험기간 with its own 전기납 premium |
[S2]; [S1] (1~10월만기) |
신생아 block |
1년만기 전기납 from birth |
[S2] [S5]; R5 |
기본계약 |
일반상해후유장해, paid as 보험가입금액 × 장해지급률 on a continuous 3~100% band, payable more than once with the percentages accumulating |
R12; [S1] [S2] [S11] |
면책기간, 보험나이 < 15 |
None — 암보장개시일 = 제1회 보험료를 받은 때 |
[S3]; [S11]; R5 |
면책기간, 태아가입용 cover |
「면책기간 없음」 at all, including the 10-day waits |
[S3] |
감액기간 |
None; where one survives it is a first-year 50% |
[S1] [S3] [S11] vs [S6] [S11] |
감액 on a foetal contract |
Never — 「피보험자가 보험가입 당시 태아인 경우에는 보험금의 100%를 지급합니다」, inserted across 17 carriers and 56 products |
R2; [S8] |
납입면제, the child |
50% 이상 후유장해 (상해 or 질병), one of the 7대질병, or a 중대한특정상해수술 |
[S2] |
납입면제, the P코드 carve-out |
「출생전후기에 기원한 특정 병태(P코드) 진단시 납입면제를 적용하지 않음」 |
[S2] |
납입면제, the 계약자 |
The 계약자’s death or 50% 이상 장해, in the main clause |
[S10 제22조제1항]; [S10 제3조] |
Waiver carries the riders |
「주계약의 보험료 납입이 면제되었을 때에는 이 특약의 차회 이후의 보험료 납입을 면제」 |
[S8] |
입원일당 |
₩40,000 per day, 1~180일 per stay |
R12; [S2] |
배상책임 |
₩100,000,000 per occurrence, 대인 / 대물(누수) / 대물(비누수) each; 자기부담금 ₩500,000 누수 / ₩200,000 otherwise; 3년만기 갱신형 |
[S5]; [S2] |
배상책임 누수 보장개시일 |
90 days from the 계약일, resetting to the renewal date at each renewal |
[S5]; [S3] |
저체중아 인큐베이터 일당 |
「최고 60일을 한도로 실제 사용일수에서 2일을 공제하고 1일당 가입금액」 |
[S1] |
주산기질환 입원일당 |
Continuous stay of 4 days or more, 3일 초과 1일당, 1회 입원당 120일 한도 |
[S8]; [S1] |
Death of the insured |
No 사망보험금 below 만 15세; the 계약자적립액 + 미경과보험료 is paid and the contract ends |
R7; REG-R50 제732조·제736조; REG-R17 제7-63조제1항제1호; REG-R25 제22조; REG-R19 제7-66조제5항 |
해약환급금 formula |
「순보험료식 계약자적립액에서 해약공제액을 공제한 금액」, floored at zero |
[S2]; [S1]; REG-R19 제7-66조제1항제1호 |
미지급형 floor |
0% during the 납입기간, 50% of the 표준형 value afterwards |
[S2] [S11]; REG-R19 제7-66조제4항제2호 |
The 표준형 comparator is synthetic |
「해지율을 적용하지 않은 상품이며, 비교안내를 위한 종목으로 실제로 판매하지 않음」 |
[S3]; [S1] |
납입최고 (grace) |
At least 14 days; operated as a calendar-month window |
REG-R25 제26조; [S8] |
부활 |
Within 3 years where no surrender value has been taken, subject to fresh underwriting; waiting periods re-run from the 부활일 |
[S8]; [S3]; REG-R25 제27조 |
Expiry |
At the 100세 계약해당일; there is no 만기환급금 on the protection part |
[S1] [S2] [S11] |
(b) Insurer-discretionary current elements#
This class is nearly empty, and its emptiness is a product fact. The contract is 무배당 at every carrier examined [S1]–[S6] [S11], so there is no 계약자배당 and the surplus-distribution machinery of 감독규정 제6-11조의7 and 제6-13조 does not attach REG-R12. There is no premium review on the 비갱신 core and no MVA. What remains:
Input |
Snapshot value |
Basis |
|---|---|---|
보장부분 적용이율 |
2.75% |
std, the modal value of the comparison board’s column; observed range 2.50%–3.00% across ten carriers [S11] |
공시이율 (적립부분) |
1.70%, named 「보장성 공시이율Ⅴ」, at 2026-07 |
[S2]; observed 1.60%–2.20% [S11] |
최저보증이율 |
0.30% |
[S2]; observed 0.20%–0.50% [S11] |
평균공시이율 |
2.50% for 2026, capped at the selling-date 공시이율 |
[S2]; REG-R9 제1-2조제13호; REG-R48 |
공시기준이율 formula |
외부지표금리수익률 × α + 운용자산이익률 × (1 − α) |
[S1]; REG-R24; the α bracketing is unverified and nothing here depends on it |
The 적용해지율 of a suppressed form |
5.0% / 3.0% / 1.0% during the 납입기간 by duration band, 0.5%–0.65% afterwards |
[S1] — the only Korean child-policy lapse basis in public |
갱신형 renewal rates |
Recomputed at attained age at each renewal |
[S7 제29조]; base run holds the issue rate flat std |
The 2026 저출산 discount |
1%–5% for one year, per insurer |
R6; off in the base run |
다자녀 / 출산 discounts |
1%–3% of 영업보험료 at five carriers |
[S11]; not modelled std |
A full-text search of the 감독규정 returns zero occurrences of 예정이율 REG-R9; what
the comparison board publishes instead is the 보장부분 적용이율, the pricing rate under
another name, and that is what prem_int_rate is. It is used only by the equivalence
diagnostics — the projection itself does not discount.
(c) Behavioral / experience assumptions (modeler’s view — all std)#
The data position for this product is the worst in the library, and it must be said
first. Nothing on Korean child incidence — cancer, cerebrovascular disease, congenital
anomaly, low birth weight, NICU admission, paediatric length of stay — was retrieved from
보험개발원, 국가암정보센터 or 통계청 in this product’s own research pass. Every incidence
rate in incidence_table.csv is therefore a std construction, each row’s provenance cell
naming the authority its shape rests on rather than a source for its level, with exactly one
exception: the row the basic contract is calibrated on.
That is a gap in the pass and not a gap in the public record, and the difference matters.
보험개발원 publishes a dated 장기손해보험 참조순보험요율 display carrying, by age and sex,
a 「기타피부암 및 갑상선암 이외의 암 발생률」 grid on the insured definition that excludes C44
and C73, a 질병입원율 grid stated in expected days per life-year, and 후유장해 rates — and its
age grid reaches 연령 0 and 10 REG-R61. The cancer and indemnity_medical passes
opened it; this one did not, and REG-R61 records the omission. So the shipped rows are
[std] because they were never reconciled to that grid, not because no grid exists. Two
consequences are carried rather than hidden. A 참조순보험요율 is a net premium rate with a
safety loading in it, not a best estimate REG-R9 REG-R61, so any use of it would still
need a std step down. And the divergence has no single sign: on the general cancer tier the
shipped paediatric anchors sit at about 0.6 (male) and 0.5 (female) of the published rate
at 연령 0 and 10, while the adult anchors sit near or slightly above it. A later pass should
re-base these rows off REG-R61 rather than rescale them.
Mortality std, and it serves two lives. 경험생명표 — the industry table, 제10회 applied
from 2024-04 — is not published in full: 보험개발원 releases the 평균수명 and the 기대여명
and not the rates REG-R33 REG-R34. mort_table.csv is a construction, log-linear between
anchor ages shaped on the 통계청 완전생명표 age pattern REG-R38 REG-R39, carrying the
three features a child policy is actually exposed to and that a table graduated from age 20
upwards would not have: the infant peak, the childhood trough at about age 10 and the
adolescent turn. Male 만나이 anchors:
만나이 |
0 |
1 |
5 |
10 |
15 |
20 |
33 |
40 |
50 |
60 |
70 |
80 |
90 |
100 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
0.0025 |
0.00025 |
0.00012 |
0.00009 |
0.00016 |
0.00035 |
0.00067713 |
0.0011 |
0.0026 |
0.006 |
0.015 |
0.043 |
0.13 |
0.31 |
q(0) = 0.0025 is about twenty times q(5), and it falls onto the anchor cell in exactly
the twelve months when the 태아 module is also paying. The table is read for the insured at
age_man(t) and for the 계약자 at payer_age + t // 12, and the two are the same file:
one Korean mortality construction, two lives, and the 계약자’s rate at issue, q(33) = 0.00067713, is what drives the whole waiver decrement for the first policy year.
mort_rate_mth(t) = 1 − (1 − q)^(1/12) std.
mort_be_factor = 1.0, and that identity is a decision. The shipped table is a
population all-cause construction, not a valuation table with a prudential margin, so there is
nothing to unwind and scaling it would be inventing one; the hook is carried for a user
substituting a company table, and model point 10 runs at 1.10. On a child policy mortality
releases the liability, so an understatement of it overstates the liability.
Morbidity — eleven causes, fourteen pivot ages, one published rate. incidence_table.csv
carries eleven causes by sex at pivot 만나이 0, 1, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90
and 100, graduated log-linearly between adjacent pivots and returned exactly at a
pivot, so the one published rate reproduces to its printed digits:
i_j(x) = exp( ln r(a) + (x − a)/(b − a) × ( ln r(b) − ln r(a) ) ) [std]
A logarithmic graduation is right because every one of these rates spans two or more orders of magnitude across the age range — general-tier cancer incidence rises about two-hundredfold from 만나이 10 to 80 — and a linear interpolation between decade pivots is wrong by a factor of two mid-span. Male rates at the three ages the anchor cell’s first eighteen months use:
Cause |
만나이 0 |
만나이 1 |
만나이 5 |
Unit |
|---|---|---|---|---|
|
0.000100265 |
0.00012761 |
0.0001823 |
events/yr |
|
0.0026 |
0.0009 |
0.0006 |
events/yr |
|
0.00018 |
0.00015 |
0.00012 |
events/yr |
|
0.00003 |
0.000025 |
0.00002 |
events/yr |
|
0.00004 |
0.000012 |
0.00001 |
events/yr |
|
0.000002 |
0.000001 |
0.000001 |
events/yr |
|
0.004 |
0.009 |
0.02 |
events/yr |
|
0.006 |
0.005 |
0.003 |
events/yr |
|
0.10 |
0.13 |
0.15 |
days/yr |
|
2.40 |
1.10 |
0.55 |
days/yr |
|
0.004 |
0.006 |
0.009 |
claims/yr |
The one published rate is disability at 만나이 5: 「일반상해 후유장해 발생률(3~100%),
기본계약, 5세, 상해 1급 — 남자 0.0001823, 여자 0.0001163」 [S1]. It is the only
observation of a Korean child morbidity rate anywhere in the research file, it is a
적용위험률 and therefore already a priced rate rather than a best estimate, and it is the
point the basic contract’s whole decrement is calibrated on. Everything else in the table is a
shape drawn around it, and each row says which authority the shape rests on — the
국가암등록통계 연령별 발생률 REG-R40, the 「기타피부암 및 갑상선암 이외의 암 발생률」 and
질병입원율 grids of the 참조순보험요율 display REG-R61, and the 국민건강보험 진료비
실태조사 REG-R41.
The two hosp_* causes are expected days, not probabilities, and that is the single most
important dimensional fact in this file. hosp_dis at 만나이 0 is 2.40 days a year, not a
frequency of 240%: it is the infant peak — colds, fevers, bronchiolitis and the perinatal
tail — and it collapses to 1.10 at 만나이 1 and 0.55 at 5. Applying the monthly conversion
1 − (1 − i)^(1/12) to a number greater than one does not merely give a wrong answer, it
gives a complex one. These two causes are divided by twelve instead, and benefit_pp for
the "HOSPITAL" kind never calls inc_rate_mth.
Sex, and why the composite reproduces the male-heavier direction. The comparison board’s published premiums show the sex relativity with no fixed sign: four carriers price the female above the male and seven below, the spread running from 62% to 114% of the male rate [S11]. That is a benefit-mix effect and not a pure morbidity effect — the products differ in whether the compulsory set is dominated by accident (male-heavy) or by cancer and thyroid (female-heavy) limbs. The shipped table takes the male-heavier direction, because the comparison basis it prices is dominated by a ₩100,000,000 accident-disability 기본계약 R12 and because the one published pair of rates runs that way — 0.0001823 male against 0.0001163 female at 만나이 5, a ratio of 1.57 [S1]. Model point 3 is the female calibration cell and prices out at ₩29,281.80 against model point 2’s male ₩31,112.91, a ratio of 0.9411.
Severity — turning an incidence into a cost std. basis_table.csv carries thirteen
scalars, every one of them a standardization with no published anchor:
Parameter |
Value |
What it stands over |
|---|---|---|
|
0.12 |
The mean 장해지급률 on a 3~100% 일반상해후유장해 event. The cover is a percentage scale, not a lump sum R12 [S1] [S2] [S11] and the modal childhood accident impairment is small. A model treating it as a lump sum at |
|
0.15 |
The same for a disease impairment, above the accident figure because a disease impairment that settles at all tends to settle higher |
|
0.85 |
P(qualifying 암수술 | 암 진단) |
|
0.50 |
P(qualifying 뇌출혈수술 | 뇌출혈 진단) |
|
0.70 |
P(qualifying 급성심근경색증수술 | 진단) |
|
₩600,000 |
Mean paid on a 가족일상생활배상책임 claim, well inside the ₩100,000,000 limit and net of the ₩200,000 / ₩500,000 대물 deductibles [S5] |
|
0.92 |
The share of expected 입원 days surviving the 1~180일 per-stay cap R12 [S2] |
|
0.08 |
The share of 3~100% 후유장해 events reaching the 50% 이상 threshold that fires the 납입면제 [S2] |
|
0.25 |
The 계약자’s 50% 이상 장해 incidence as a ratio to mortality at the same age — no Korean disability incidence table is public |
|
0.40 |
The 누수사고 대물 share of the liability loss cost, being the limb whose 보장개시일 resets at each renewal [S5] [S3] |
|
0.012 |
The annualised foetal-loss rate over the pre-birth months |
|
4.0 |
Broad 뇌혈관질환 / 허혈성심장질환 against narrow 뇌출혈 / 급성심근경색증 [S11] [S2] R12 |
|
0.75 |
순보험료 as a share of 영업보험료, used only in the 표준해약공제액 formula REG-R20 |
The foetal-loss rate is the most exposed number in the file. No Korean source retrieved
gives one; what the sources fix is the mechanic — that the contract is 무효 and the whole
premium comes back [S8 제56조] [S9] — and not the level. 1.2% a year over five months costs
the anchor cell ₩306.90 of refunded premium in total, so it is small in the cash flow and
large in principle: it is the only decrement in krlib that de-recognises a contract rather
than terminating it.
No 180-day one-hospitalization memory is implemented. No retrieved Korean child wording
states a re-admission grouping rule — this is a real difference from the Japanese third-sector
chassis, where the 180-day rule is in every 約款 — so the per-stay cap enters as a single
hosp_cap_factor of 0.92 rather than as a ledger. Inventing a grouping rule would be
inventing an unsourced benefit mechanic.
The 태아 module std — nine limbs, two timings, and two of them day-capped.
neonatal_table.csv gives each limb a frequency per birth, an amount (fixed or a ratio to the
module’s own ₩10,000,000 가입금액), an expected number of units and a timing:
Item |
timing |
freq |
amount |
ratio |
units |
expected cost |
|---|---|---|---|---|---|---|
|
birth |
0.0120 |
— |
0.10 |
1 |
₩12,000 |
|
birth |
0.0020 |
— |
0.20 |
1 |
₩4,000 |
|
birth |
0.0006 |
— |
1.00 |
1 |
₩6,000 |
|
birth |
0.0025 |
— |
1.00 |
1 |
₩25,000 |
|
₩47,000 |
|||||
|
block |
0.0600 |
₩50,000 |
— |
8.0 days |
₩24,000 |
|
block |
0.1100 |
₩10,000 |
— |
7.5 days |
₩8,250 |
|
block |
0.0200 |
₩1,000,000 |
— |
1 |
₩20,000 |
|
block |
0.0080 |
₩1,000,000 |
— |
1 |
₩8,000 |
|
block |
0.0016 |
— |
0.20 |
1 |
₩3,200 |
|
₩63,450 |
The two day-capped limbs are implemented as written, which is why their units are
expected paid days after the contractual deduction and inside the cap:
incubator benefit = 50,000 × max(0, min(days_used, 60) − 2) [S1]
perinatal cash = 10,000 × max(0, min(stay_days, 120) − 3), stay_days ≥ 4 [S8]
The module’s cost is a length-of-stay question, not an amount question, and the useful
datum is the supervisor’s own worked claim: a birth at 32 weeks and 1.84 kg, congenital
atresia of the small intestine, enterostomy, incubator, in hospital from 2007-12-07 to
2008-05-01, total paid ₩16,836,420 of which the neonatal day benefits were ₩4,200,000 —
capped by days, not by amount R3. The neonatal_haem frequency carries a caveat of its
own: it is regime-dependent rather than stationary, because the 2013-09 supervisory
decision requiring neonatal claims to be paid on the diagnosis name rather than the KCD code
ended refusals of 뇌출혈 coded P52 and raised frequency sharply R5.
Lapse std, on a form the regulator prescribes rather than the market observes. Three
bases ship. The base run is loglinear, the 2024-11-07 계리가정 guideline’s 원칙모형: a
log-linear decay from a first-year rate to 0.1% at 납입완료, with a post-완납 ultimate of
0.8% REG-R27 R11:
lapse_rate(t) = exp( ln r0 + (t / m) × ( ln r1 − ln r0 ) ) for t < m = 240
= r2 for t >= m
lapse_rate_mth(t) = 1 − (1 − lapse_rate(t))^(1/12) [std]
basis |
|
|
|
Source |
|---|---|---|---|---|
|
5.0% |
0.1% |
0.8% |
|
|
5.0% (<=10y) / 3.0% (10–15y) / 1.0% (>15y) |
1.0% |
0.5% |
[S1] verbatim |
|
3.0% |
3.0% |
3.0% |
std comparison vector |
The 0.1% and the 0.8% are the ruling’s own numbers REG-R27; the 5.0% starting level is
the top band of the only 적용해지율 any Korean child product publishes [S1], so unlike every
other lapse assumption in this library it has an observed anchor. What is unverified is
the functional form: the 「IFRS17 주요 계리가정 가이드라인」 attachment was never converted
from HWP, so the values are verified from the 보도자료 and the log-linear shape is not.
Shipping disclosed beside loglinear is exactly the comparison the guideline obliges an
insurer departing from the 원칙모형 to disclose, and the two produce visibly different
contracts: model point 5 runs on disclosed and its undiscounted net_cf is −₩8,061,541
against the anchor’s −₩13,085,435.
Lapse is absorbing std. 부활 is available within three years even where no surrender value has been taken [S8] REG-R25 제27조, and below 보험나이 15 there is no cancer waiting period to re-run [S3] — so a reinstated child policy is very nearly the policy that lapsed, which is a stronger statement than the chassis can make. The simplification is nonetheless conservative on a protection product and is recorded as one.
Expenses and commission (all levels std; no Korean expense or commission scale for this
product is public). Both 상품요약서 in the set define 계약체결비용 and 계약관리비용 and then
give no number, and the 산출방법서 that holds the 예정사업비율 is a filed but undisclosed
기초서류 REG-R2. What is available is a statutory ceiling — 감독규정 [별표 14] caps the
deductible acquisition cost at the 표준해약공제액 REG-R20, and the FSC’s 2019 expense reform
states the same cap as roughly thirteen months’ premium for a 보장성보험 REG-R29 — and
a commission cap: first-year remuneration within the first year’s expected premium, with an
obligation to offer an instalment structure paying no more than 60% of the 표준해약공제액 a
year REG-R22 제4-32조제5항·제8항 REG-R29. It is the thirteen-month reading that
binds here: the [별표 14] formula gives ₩1,575,064.09 on the anchor cell, 56.25 months of
core premium, so surr_chg_cap_pp() takes the lesser of the two — see The 표준해약공제액
below.
Input |
Value |
Anchor-cell amount |
|---|---|---|
Acquisition cost |
0.9 × 표준해약공제액 |
₩327,600.0000 = 11.70 months of core premium |
Initial commission |
0.65 × acquisition cost |
₩212,940.0000 |
Non-commission acquisition expense |
the remainder, at |
₩114,660.0000 |
Renewal commission |
3.0% of premium, |
₩880.93 at |
Maintenance |
₩400 per policy per month, inflating |
₩400.00 at |
Maintenance, premium-related |
5.0% of premium income while premiums are paid |
₩1,550.00 at |
Claim handling |
₩30,000 per benefit event, uninflated |
₩30.17 at |
Expense inflation |
2.0% p.a., the Bank of Korea’s own target |
×7.24 by |
Two of those deserve a sentence each. Acquisition cost and initial commission together are
₩327,600 at t = 0 against a ₩31,000 first-year office premium — 10.57 months of it — and
that is why net_cf(0) is −₩298,646.2076 on a contract whose first-year benefit outgo is
₩141,963. And expense inflation is not a detail on this product: 2% a year compounds to
7.24 over a hundred years, per-policy maintenance runs for the whole term rather than to
납입완료, and the ₩400-a-month charge is ₩2,898 a month by the 100세 계약해당일. Maintenance
over the eighty paid-up years is the largest single expense item in the projection, which is
why it is held as its own parameter.
No renewal commission is paid after 납입완료. A projection that keeps charging it there is charging commission on a premium nobody pays, and on this product that would be eighty years of it.
Cash flow components and recursions#
Notation#
Symbol |
Cells |
Meaning |
|---|---|---|
|
— |
policy month, 0-based: |
— |
|
the number of projected months, |
|
|
the terminal 계약해당일 index, |
|
|
납입기간 in months = 240; last premium at |
|
|
the policy month of birth = 5; 0 on a non-foetal point |
|
|
|
|
|
보험나이 at the 계약일 = 0 |
|
|
attained 보험나이 in month |
|
|
attained 만나이; |
|
|
보험가입금액 of cover |
|
|
입원일당 per day; the per-stay cap factor, which is a |
|
|
the two premium streams |
|
|
office premium due in month |
|
|
the 2026 저출산 discount factor; 1 in the base run |
|
|
annual / monthly mortality of the insured |
|
|
annual mortality of the 계약자 |
|
|
monthly pre-birth 무효 rate |
|
|
annual / monthly lapse |
|
|
the two waiver limbs and their combination |
|
|
annual / monthly incidence of cause |
|
|
probability cover |
|
|
1 where cover |
|
|
감액 factor; 1 throughout the base run |
|
|
waiver entries in month |
|
|
the two compartments and their sum |
|
|
계약자적립액 at time |
|
|
해약환급금 payable at time |
|
|
unamortised 해약공제액 at time |
|
|
미경과보험료, half a month’s premium std |
|
|
net cash flow, income-positive |
Dimensional check, and it catches the commonest error in this product. q, w, v, ω
and every i_j except two are dimensionless probabilities per year. i_hosp_acc and
i_hosp_dis are days per policy year, so D × (i_hosp_acc + i_hosp_dis)/12 × κ is
KRW per policy-month; S_j × i_j,m is KRW per policy-month for an event cause. A, CV,
X, U, P are KRW per policy; l is dimensionless. i_hosp_dis(t) = 2.40 at 만나이 0,
so 1 − (1 − i)^(1/12) is not a real number — the model divides the two day counts by
twelve and never routes them through inc_rate_mth.
The pre-birth period#
For t < b the insured does not exist. born(t) is false, y(t) = −1, q(t) = 0, every
i_j(t) = 0, c_j(t) = 0 and every benefit written on the child’s own life is identically
zero. What is in force is the premium on all three streams, the void decrement, and — at
t = b and not before — the 태아보장기간 limbs, which pay in respect of events of the
pregnancy and the delivery from the date of birth [S8 제59조]. The 계약자’s waiver limb
also runs from t = 0: the policyholder is an insured of the contract in his own right
[S10 제3조], so his death is a contractual event from the 계약일 whether or not the child has
been born.
v(t) = 1 − (1 − void_rate_ann)^(1/12) for foetal and t < b, else 0
check_cover_at_birth() asserts that the sum of claims(t, k) over k ∈ {DISABILITY, DIAGNOSIS, SURGERY, HOSPITAL, EVENT, LIABILITY, DEATH} is zero for every t < b — the loop
runs to t = b, where the residual is identically zero because the child is born and the
covers are properly open. The 태아
module is deliberately not in that sum — it is the one thing that may pay in respect of an
event before the insured legally exists — and is tested separately by
check_neonatal_term().
The in-force recursion, in two compartments#
Within month t the order is void, then the waiver, then mortality, then lapse
[std order]. For 0 <= t < n, with l_P(0) = 1 and l_W(0) = 0:
e(t) = l_P(t) ( 1 − v(t) ) ω_m(t)
l_P(t+1) = ( l_P(t) ( 1 − v(t) ) − e(t) ) ( 1 − q_m(t) ) ( 1 − w_m(t) )
l_W(t+1) = ( l_W(t) ( 1 − v(t) ) + e(t) ) ( 1 − q_m(t) )
l(t) = l_P(t) + l_W(t)
and the four exits:
pols_void(t) = l(t) v(t) [zero from birth]
pols_death(t) = ( l(t) − pols_void(t) ) q_m(t) [zero before birth]
pols_lapse(t) = ( l_P(t) ( 1 − v(t) ) − e(t) ) ( 1 − q_m(t) ) w_m(t)
pols_maturity(t) = l(t) if t = n, else 0
Four properties follow and each has a check. The roll-forward
l(t) − l(t+1) = pols_void + pols_death + pols_lapse + pols_maturity closes exactly, to
roll_fwd_tol = 1e-10, in every month (check_pols_roll_fwd). The compartments sum to the
block (check_waiver_split). The four decrements sum over the whole projection to
pols_if_init() — on the anchor cell 0.0049757330 voids, 0.4688979472 deaths, 0.5103916457
lapses and 0.0157346742 maturities, totalling exactly 1 (check_exit_total). And every
decrement is nil at t = n, with l(n+1) = 0.
The void applies to the whole block and mortality to the survivors of it, in that order, because a contract that turns out never to have been valid cannot also have produced a death of an insured who was never born. Waived policies carry mortality but not lapse.
Benefit components, per policy in force#
cover_open(t, j) = 0 if not born(t), or t >= n,
or ( j ∈ {cancer, minor_cancer} and t < W )
= 1 otherwise
reduction_factor = 0.5 if t < G, else 1 [G = 0 on a foetal contract, always]
benefit_DISABILITY(t) = S_dis · 0.12 · i_disability,m(t)
+ S_ddis · 0.15 · i_disease_disab,m(t)
benefit_DIAGNOSIS(t) = ρ(t) · Σ_{j∈{cancer, minor_cancer, cerebral, cardiac}}
S_j · i_j,m(t) · φ_j(t) · c_j(t)
benefit_SURGERY(t) = S_surg · Σ_{j∈{cancer, cerebral, cardiac}}
s_j · i_j,m(t) · φ_j(t) · c_j(t)
benefit_HOSPITAL(t) = D · ( i_hosp_acc(t) + i_hosp_dis(t) ) / 12 · κ
benefit_EVENT(t) = S_frac · i_fracture,m(t) + S_burn · i_burn,m(t)
benefit_LIABILITY(t) = i_liability,m(t) · σ_L · ( S_liab / 100,000,000 ) · g(t)
with g(t) = 1 − leak_share if t mod 36 < 3, else 1
benefit_NEONATAL(t) = neonatal_birth + neonatal_block / 12 if t = b
= neonatal_block / 12 if b < t < f
= 0 otherwise
φ_j(t+1) = φ_j(t) ( 1 − i_j,m(t) ), φ_j(0) = 1
and claims(t, k) = benefit_k(t) × l(t) for each of the seven morbidity kinds.
The 기본계약 is a percentage scale, not a lump sum. 보험가입금액 × 장해지급률 on a
continuous 3~100% band, payable more than once with the percentages accumulating
R12 [S1] [S2] [S11]. That is why benefit_DISABILITY carries a severity of 0.12 and no
frac_open ledger, and why it is the one benefit whose cost a naive implementation
overstates by about eight times.
The liability rider’s renewal is the one place the 갱신형 mechanic bites. The 누수사고
limb’s 90-day 보장개시일 runs from the 계약일 and resets to the renewal date at each
renewal of the 3년만기 block [S5] [S3], so 40% of the loss cost is off for the first three
months of every 36-month cycle. On the anchor cell that is t ∈ {0,1,2, 36,37,38, 72,73,74, …} — and at t = 0 to t = 4 it is invisible, because the child is not yet born and the
whole rider is off.
The 태아 module has two terms, and they are not the same term. The 태아보장기간 runs
계약체결일 ~ 출생시점 [S2] and its limbs pay at birth, all at once: ₩47,000 per birth.
The 신생아 block is a 1년만기 전기납 term from birth [S2] [S5] R5 and its ₩63,450 is
spread evenly over twelve months at ₩5,287.50 each. So t = b carries both — ₩52,287.50 per
policy in force — and t = b+1 … b+11 carry only the block. check_neonatal_term() asserts
the module pays inside b <= t < f and nowhere else, and pays nothing at all on a contract
that is not a 태아가입.
The account, the surrender charge and the surrender value#
cum_prem_pp(t) = P_core × min(t, m)
refund_ratio(t) = refund_build( t/12 ) × refund_taper( t/n )
cv_std_pp(t) = refund_ratio(t) × cum_prem_pp(t)
X(t) = surr_chg_cap_pp × max( 0, 1 − t / surr_chg_period ) [std]
A(t) = min( cv_std_pp(t) + X(t),
max( cv_std_pp(t), net_prem_ratio × cum_prem_pp(t) ) ) [std]
U(t) = 0.5 × P(t) [std]
CV(t) = max(0, cv_std_pp(t)) cv_form = std
= 0 for t < m cv_form = susp
= max(0, k × cv_std_pp(t)) for t >= m cv_form = susp
= max(0, cv_grade_ratio(t) × cv_std_pp(t)) cv_form = graded
The 환급률 progression is published and the model reproduces it exactly. refund_build is
a current 상품요약서’s grid on a named specimen contract — 0.0% at 1 year, 45.6% at 3, 62.5%
at 5, 73.7% at 10, 78.3% at 15, 82.6% at 20, 101.2% at 30, 122.5% at 40, 144.1% at 50 and
158.9% at 60, at 공시이율 1.7% (2026-07), 평균공시이율 2.5% and 최저보증이율 0.3% [S2] —
linearly interpolated in duration and held flat beyond 60 years. refund_taper is the
terminal collapse, 1.0 until 85% of the term has run and then down to zero at 만기, indexed on
the fraction of the term run off rather than on a duration, and calibrated so that a
100세만기 contract reproduces the published 16.0% at 95 years [S2]. Splitting the
progression in two is what lets one shipped grid serve a 30세만기, a 100세만기 and a 110세만기
contract without re-basing the published figures. check_refund_grid() asserts every
published node the contract reaches.
The 계약자적립액 is recovered from the published surrender value, and the first two years
are where the std enters. What the 상품요약서 publishes is 「순보험료식 계약자적립액에서
해약공제액을 공제한 금액」 [S2] — already net of the charge and floored at zero — so the
account can be recovered by adding the unamortised charge back only where the floor is not
binding. Where it is, the identity gives no more than 0 <= A <= X, and the account is
capped instead at the cumulative net premium, 0.75 × cum_prem_pp(t), which is the most a
순보험료식 reserve can have accumulated before any interest or mortality. The account
therefore starts at nil, as it must, rather than at the surrender charge.
check_av_bounds() asserts CV(t) <= A(t) <= cv_std_pp(t) + X(t) and A(t) >= 0 in every
month. The 공시이율 reset is not implemented; it is carried by reference to
WholeLife_KR_S.
The 표준해약공제액 (pyojun haeyak gongjeaek, the statutory cap on the surrender charge), and how a product with no death benefit acquires a face amount. 감독규정 [별표 14] states
표준해약공제액 = 연납순보험료 × 5% × 해약공제계수 + 보험가입금액 × 10/1000 [REG-R20]
with 해약공제계수 = 「보험기간(최대 20년)」 = 20 and note 3 requiring the 연납순보험료 to be recomputed on a 20년납 footing where the term is 20 years or more. The second term needs a 보험가입금액 this contract does not have — [별표 15] 제3호 covers only 일반사망을 보장하는 보장성보험, so it falls into 제9호: 보험가입금액 = (위험보험료 ÷ 정기보험의 위험보험료) × 정기보험의 보험가입금액, computed at the 기준연령 요건, 남자 만 40세, 전기납, 월납 REG-R21 REG-R9 제1-2조제2호. A term policy’s risk premium per unit of face is its mortality rate, so
sa_notional_pp = risk_prem_ann_pp / q(40, M)
= 145,537.04939942522 / 0.0011 = 132,306,408.54493201
formula limb = 0.05 × 252,000 × 20 + 0.01 × 132,306,408.54493201
= 252,000 + 1,323,064.08544932 = 1,575,064.08544932
surr_chg_cap_pp = min( 1,575,064.08544932, 13 × 28,000 ) = 364,000.0
The 10/1000 of the schedule is one per cent, not one per mille, and at that rate the formula
limb does not bind on this product — which is itself a finding. [별표 14] and the FSC’s 2019
expense reform are two readings of one ceiling, the reform stating it as 보장성보험
13배 of the monthly premium REG-R29, and here they are 4.33 times apart: ₩1,575,064.09
against ₩364,000.00, 56.25 months of core premium against thirteen. The gap is structural.
제9호 divides this contract’s whole first-year risk premium by a 40-year-old’s mortality rate,
and a bundled child stack has a large risk premium and a very small death rate, so the notional
보험가입금액 it produces is ₩132.3 million against the ₩100 million of accidental-disability
cover actually written. surr_chg_cap_pp() therefore takes the lesser of the two, which is
the treatment Cancer_KR_S states for the same mechanic, and the thirteen-month limb binds
on all ten shipped model points: the formula limb runs from ₩245,582 on point 9 to
₩1,654,269 on point 6 and clears thirteen months’ premium on every one of them.
acq_cost_months() publishes the ratio actually reached — 11.70, or 0.9 × 13 — so the two
readings can be compared rather than asserted equal, and check_acq_cost_cap() asserts the
acquisition cost stays inside the cap.
Evaluating 제9호 at the 기준연령 rather than at a child age is a substantive finding too, not a convenience. At 만나이 0 the mortality rate is 0.0025 and at 5 it is 0.00012; using the latter would put the notional 보험가입금액 at ₩1,212,808,745 and the formula limb at ₩12,380,087.45 — 442.1 months of premium, which is absurd on its face. At 남자 만 40세 it lands at ₩1,575,064.09, or 56.25 months. The reference age therefore decides the notional amount by a factor of nine even though, on this product, the binding limb is the other one.
Processing order#
For t = 0, 1, …, n:
Start of month.
premiums(t) = P(t) · d(t) · l_P(t)— carried on the paying compartment alone, a waived policy paying nothing while its premiums are deemed paid for every benefit purpose. Maintenance expense400 · (1.02)^(t/12) · l(t)plus0.05 · premiums(t). Renewal commission0.03 · premiums(t)for12 <= t <= m − 1. Att = 0additionally the acquisition expense(acq_cost_pp − comm_init_pp) · l(0)and the initial commissioncomm_init_pp · l(0).Look up both ages.
age(t)decides the premium and the 보험나이 15 thresholds;age_man(t)decides every rate. Henceq(t),q^P(t),w(t),v(t), everyi_j(t), and henceω_C,ω_P,ω.End of month — morbidity benefits, each
benefit_k(t) × l(t), with theφ_jledgers read at their start-of-month values and the 태아 module on its own two terms.End of month — the four exit payments.
claims_death(t) = ( A(t) + U(t) ) × pols_death(t) claims_lapse(t) = ( CV(t) + U(t) ) × pols_lapse(t) claims_maturity(t) = A(t) × pols_maturity(t) claims_void(t) = ( cum_prem_pp(t) + prem_foetal_paid_pp(t) ) × pols_void(t)
and the claim-handling expense
30,000 × ( claim_count_pp(t) · l(t) + pols_death(t) + pols_void(t) ).End of month — decrements, in the order void, waiver, mortality, lapse, per the recursion above.
Ledger update.
φ_j(t+1) = φ_j(t)(1 − i_j,m(t))for each of the four 최초 1회한 diagnosis covers.
Everything except the exit payments is nil at t = n: no premium, no morbidity benefit, no
maintenance expense, no commission. claims_maturity(n) is the residual 계약자적립액, which
on the shipped progression is zero.
Net cash flow#
CF(t) = premiums(t)
− claims_disability(t) − claims_diagnosis(t) − claims_surgery(t)
− claims_hospital(t) − claims_event(t) − claims_liability(t)
− claims_neonatal(t) − claims_death(t) − claims_lapse(t)
− claims_maturity(t) − claims_void(t)
− claim_expenses(t) − expenses(t) − commissions(t)
net_cf is income-positive, the library-wide sign and these notes’ own, so there is no
outgo-positive liability_cf companion. expenses is acquisition and maintenance only; the
claim-handling expense is a line of its own, with its own cells, its own subtraction and its
own column, which keeps the acquisition strain and the morbidity-driven handling cost from
moving together in one figure. No bare claims subtotal is published beside its own
parts: result_cf() carries the eleven kinds and check_net_cf() asserts that they rebuild
net_cf(t) in every month, so a twelfth kind added to claims() and left out of the
statement shows up rather than silently vanishing.
Optional modules (all off in the base run)#
Module |
Switch |
Base |
What turns on |
|---|---|---|---|
해약환급금 미지급형 |
|
|
|
미지급형Ⅲ, graded |
|
|
the published ten-step ladder: 5% from M to M+2 years rising 5 points every two years to 50% from M+18 [S1]. Model point 5 |
면책기간 |
|
0 |
the two cancer limbs closed for three months; only reachable at 보험나이 >= 15. Model points 7 and 8 |
감액기간 |
|
0 |
every diagnosis benefit at 50% for a year; disapplied unconditionally on a 태아 contract R2. Model point 7 |
Broad adult-disease definitions |
|
0 |
뇌혈관질환 and 허혈성심장질환 in place of 뇌출혈 and 급성심근경색증, at |
The 계약자 waiver |
|
on |
removes the second decrement life entirely. Model points 2, 3, 7, 8, 9, 10 |
The child waiver |
|
on |
model point 8 |
태아가입 |
|
on |
removes the void decrement, the 태아 module, the second premium stream and the age offset in one switch. Model points 2, 3, 5, 7, 8, 9 |
The 2026 저출산 discount |
|
0 / 0 |
a 1%–5% haircut on the office premium for twelve months R6. Model point 10 at 5% |
Lapse basis |
|
|
|
Mortality best-estimate scalar |
|
1.0 |
1.10 on point 10 |
Deliberately not modelled, and stated as such rather than omitted silently. The 임신·출산질환 module written on the mother — 모성사망, 임신·출산질환 입원일당 and 수술, 분만전후출혈, 유산 진단·수술·입원, 출산전특정태아이상진단, all running 계약일 ~ 분만 후 42일 at mother’s issue ages 20~47세 [S2] [S5]. The 부양자 benefit stack on the parent’s own life, of which one death rider is compulsory on a 태아 contract [S5] [S11] — the model carries the parent as a decrement and not as a benefit, and the two are not interchangeable. 다태아 plans, priced at roughly 2× for twins and 3× for triplets R5 R4. The named-cancer riders (다발성소아암, 16대특정암, 5대고액치료비암, 전이암, 재진단암). The 후유장해 생활지원금 annuity forms [S11]. 일반상해사망 from 만 15세 [S1] [S4]. The 공시이율 reset. And 실손 riders of any kind, statutorily unattachable since April 2018 R9 R10. No exclusion decrement is modelled: the general 보험금을 지급하지 않는 사유 articles were never read in full, so no lapse or claim leakage for them is carried.
Policyholder behavior modeling#
Lapse is real, immediate and absorbing. A missed premium opens a 납입최고 of at least 14 days REG-R25 제26조, operated in practice as a calendar-month window running 「납입기일 다음날부터 납입기일이 속하는 달의 다음달 마지막 날까지」, so a premium due on 15 September is in grace to 31 October and the contract lapses on 1 November [S8]. That is why the monthly grid is the right one for it. The base run applies lapse at the end of the month in which the premium is missed and does not model the grace lag — a one-month timing effect on an undiscounted projection.
부활 is not modelled, and on this product the simplification is a real one. Reinstatement is available within three years of lapse where no surrender value has been taken [S8] REG-R25 제27조, subject to fresh underwriting, and waiting periods re-run from the 부활일 [S3] — but below 보험나이 15 there is no cancer waiting period to re-run [S3], so a reinstated child policy is very nearly the policy that lapsed. On the chassis the same simplification is conservative because the 90 days re-runs; here it is conservative only because the projection loses the premium. Treating lapse as absorbing is std and the direction is stated: it understates persistency.
On the 표준형 there is a surrender value and therefore a real economic surrender decision.
CV(t)reaches ₩1,050,000 att = 60and crosses premiums paid att = 353, so a policyholder in the second decade has something to take. On the 미지급형 there is nothing at all through the whole 납입기간, no 보험계약대출 and no automatic premium loan to break the fall REG-R28 — which is exactly why the lapse assumption over that period is worth so much CSM and why it became a supervisory matter R11 REG-R27. The two forms carry the samelapse_ratein the shipped model; no dynamic lapse term is modelled and that is a named gap, not an oversight.The waived cohort cannot lapse. See State variables. On the anchor cell
pols_waived(240)is 0.0334654434, 4.36% of the in-force block at 납입완료, and it carries mortality for the remaining eighty years without ever being exposed to a lapse rate again.Elections are not behaviour.
cv_form,term_age,prem_period_years, the rider set and the 태아 module are elected at issue and cannot be changed. They are model-point attributes; a code path that varies them overtmodels a contract term that does not exist. The one genuine mid-term option is a change of 계약자, which would change the second decrement life; no retrieved wording states how the waiver responds, so the composite holds the 계약자 fixed and marks the point unverified.청약철회 is out of scope: 15 days from receipt of the policy and not more than 30 from application [S8] REG-R51, a pre-inception decrement needing a new-business funnel this library does not have.
The 2026 저출산 discount is a behaviour the supervisor created. From 2026-04-01 every insurer operates a 1%–5% discount for one year where the policyholder or spouse is within a year of a birth, on 육아휴직, or on 육아기 근로시간 단축 R6; on the birth limb it applies to a sibling’s policy, not the newborn’s own. 어린이보험 is expressly excluded from the companion 보험료 납입유예 scheme R6, so there is no deferral state to model — only a premium haircut, off in the base run. Whether it bites on the 영업보험료 or the 보장보험료 is not stated and is unverified; the model applies it to the whole office premium.
Worked example#
Anchor cell (point_id = 1, CH-KR-0001). A 태아가입 contract: 계약나이 0 at
the 계약일, priced male because the sex is unknown at issue R3 [S8], birth at policy
month 5, 보험기간 to the 100세 계약해당일 (n = 1200), 20년납 (m = 240), 월납,
표준형, with both premium waivers on and the 계약자 male 만 33. 기본계약 상해후유장해
₩100,000,000; the R12 rider set at 질병후유장해 ₩10,000,000, 암진단비(유사암 제외)
₩10,000,000, 유사암진단비 ₩2,000,000, 뇌출혈진단비 ₩10,000,000, 급성심근경색증진단비
₩10,000,000, 수술비 ₩5,000,000 each on the three named diseases, 상해·질병 입원일당 ₩40,000
per day, 골절진단비 ₩400,000, 화상진단비 ₩200,000, 가족일상생활배상책임 ₩100,000,000; 태아
module 가입금액 ₩10,000,000 running to t = 17. Office premium ₩31,000 a month to t = 16
and ₩28,000 from t = 17 to t = 239. waiting_mths = 0, reduction_mths = 0,
broad_def = 0, prem_discount_rate = 0, lapse_basis = loglinear, mort_be_factor = 1.0.
Every assumption value the first eighteen months use, and its tag.
Quantity |
Value |
Tag |
|---|---|---|
|
0.012 |
std — no Korean foetal-loss rate was retrieved |
|
|
derived |
|
0 — a 태아 has no mortality in this contract R3 |
derived |
|
0.0025; |
|
|
0.00025; |
|
|
0.00067713 |
|
|
0.00072573 |
|
|
|
std |
|
0 — the P코드 carve-out over the 신생아 block [S2] |
|
|
|
|
|
0.05; |
[S1]; REG-R27 |
|
|
shape std |
|
0.000100265 / 0.00012761 |
std, shaped on the 만나이 5 anchor |
|
0.0001823 |
[S1] — the only published rate |
|
0.0026 / 0.0009 |
|
|
0.00018 / 0.00015 |
|
|
0.00003 / 0.000025 |
|
|
0.00004 / 0.000012 |
|
|
0.000002 / 0.000001 |
|
|
0.004 / 0.009 |
|
|
0.006 / 0.005 |
|
|
0.10 / 0.13 days a year |
|
|
2.40 / 1.10 days a year |
|
|
0.004 / 0.006 claims a year |
|
|
0.12 / 0.15 |
|
|
0.85 / 0.50 / 0.70 |
|
|
0.92 |
|
|
₩600,000 |
std [S5] |
|
0.40 |
std [S5] [S3] |
|
₩47,000 / ₩63,450 |
std [S1] [S2] [S8] |
|
₩400 / 5% / 2% |
|
|
₩30,000 |
|
|
₩327,600.0000 / ₩212,940.0000 / 3% |
|
|
2.75% |
std, observed 2.50%–3.00% [S11] |
The first eighteen policy months#
result_cf(), rows t = 0 to t = 17, at the precision the model produces. pols_if is the
start-of-month count and is the weight on every cash flow of the same row.
|
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|---|
0 |
1.0000000000 |
31,000.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
1 |
0.9947337283 |
30,834.5604 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
2 |
0.9895656205 |
30,672.1777 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
3 |
0.9844932382 |
30,512.7761 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
4 |
0.9795142152 |
30,356.2821 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
5 |
0.9746262555 |
30,202.6242 |
414.8570 |
185.1917 |
70.8281 |
7,472.1346 |
227.9207 |
195.2835 |
50,960.7703 |
6 |
0.9706008315 |
30,075.7076 |
413.1436 |
184.4245 |
70.5346 |
7,441.2730 |
226.9793 |
194.4770 |
5,132.0519 |
7 |
0.9666551736 |
29,951.2731 |
411.4641 |
183.6725 |
70.2469 |
7,411.0230 |
226.0566 |
193.6864 |
5,111.1892 |
8 |
0.9627873748 |
29,829.2615 |
409.8177 |
182.9353 |
69.9649 |
7,381.3699 |
225.1521 |
192.9114 |
5,090.7382 |
9 |
0.9589955828 |
29,709.6152 |
408.2037 |
182.2126 |
69.6884 |
7,352.2995 |
224.2654 |
192.1516 |
5,070.6891 |
10 |
0.9552779980 |
29,592.2781 |
406.6213 |
181.5040 |
69.4173 |
7,323.7980 |
223.3960 |
191.4068 |
5,051.0324 |
11 |
0.9516328712 |
29,477.1960 |
405.0697 |
180.8091 |
69.1515 |
7,295.8520 |
222.5436 |
190.6764 |
5,031.7588 |
12 |
0.9480585027 |
29,364.3159 |
403.5483 |
180.1277 |
68.8909 |
7,268.4485 |
221.7077 |
189.9602 |
5,012.8593 |
13 |
0.9445532569 |
29,253.4383 |
402.0562 |
179.4595 |
68.6352 |
7,241.5750 |
220.8880 |
189.2579 |
4,994.3253 |
14 |
0.9411155266 |
29,144.6625 |
400.5929 |
178.8041 |
68.3845 |
7,215.2190 |
220.0841 |
188.5691 |
4,976.1483 |
15 |
0.9377437493 |
29,037.9400 |
399.1577 |
178.1613 |
68.1386 |
7,189.3687 |
219.2956 |
187.8935 |
4,958.3201 |
16 |
0.9344364051 |
28,933.2234 |
397.7499 |
177.5307 |
67.8973 |
7,164.0124 |
218.5221 |
187.2308 |
4,940.8325 |
17 |
0.9311920157 |
26,040.4216 |
223.6387 |
130.3535 |
52.0636 |
3,512.4563 |
358.2944 |
280.1288 |
0.0000 |
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|
0 |
0.0000 |
66.0413 |
0.0000 |
30.1663 |
116,610.0000 |
212,940.0000 |
-298,646.2076 |
1 |
0.0000 |
64.6018 |
31.0077 |
30.0074 |
1,940.2787 |
0.0000 |
28,768.6648 |
2 |
0.0000 |
63.1986 |
61.6931 |
29.8515 |
1,930.7437 |
0.0000 |
28,586.6907 |
3 |
0.0000 |
61.8306 |
92.0653 |
29.6985 |
1,921.3905 |
0.0000 |
28,407.7911 |
4 |
0.0000 |
60.4968 |
122.1330 |
29.5483 |
1,912.2146 |
0.0000 |
28,231.8894 |
5 |
24.4953 |
59.2432 |
0.0000 |
47.4875 |
1,903.2117 |
0.0000 |
-31,358.7996 |
6 |
28.6453 |
58.0199 |
0.0000 |
47.2914 |
1,895.8889 |
0.0000 |
14,382.9781 |
7 |
32.7629 |
56.8258 |
0.0000 |
47.0991 |
1,888.7182 |
0.0000 |
14,318.5284 |
8 |
36.8488 |
55.6602 |
0.0000 |
46.9107 |
1,881.6959 |
0.0000 |
14,255.2563 |
9 |
40.9041 |
54.5223 |
0.0000 |
46.7259 |
1,874.8187 |
0.0000 |
14,193.1339 |
10 |
44.9297 |
53.4112 |
0.0000 |
46.5448 |
1,868.0831 |
0.0000 |
14,132.1337 |
11 |
48.9264 |
52.3262 |
0.0000 |
46.3671 |
1,861.4858 |
0.0000 |
14,072.2293 |
12 |
52.8951 |
51.2664 |
0.0000 |
46.1930 |
1,855.0237 |
880.9295 |
13,132.4657 |
13 |
56.8367 |
72.6440 |
0.0000 |
46.0222 |
1,848.6861 |
877.6031 |
13,055.4490 |
14 |
60.7520 |
96.5221 |
0.0000 |
45.8547 |
1,842.4776 |
874.3399 |
12,976.9142 |
15 |
64.6417 |
122.7277 |
0.0000 |
45.6904 |
1,836.3953 |
871.1382 |
12,897.0114 |
16 |
67.0866 |
151.0962 |
0.0000 |
45.5292 |
1,830.4361 |
867.9967 |
12,817.3027 |
17 |
6.7821 |
177.0176 |
0.0000 |
50.1247 |
1,685.0952 |
781.2126 |
18,783.2542 |
claims_maturity is 0.0000 in every row above and in every row of the projection.
The same months in result_pols(), which is where the two ages, the two compartments and the
void decrement can be read side by side:
|
|
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|---|---|
0 |
1.0000000000 |
0.0000000000 |
0.0010055425 |
0.0000000000 |
0.0042607292 |
0 |
−1 |
0.00000000 |
0.0500000000 |
0.0008464125 |
1 |
0.9946632375 |
0.0000704908 |
0.0010002471 |
0.0000000000 |
0.0041678607 |
0 |
−1 |
0.00000000 |
0.0491916016 |
0.0008464125 |
2 |
0.9894250860 |
0.0001405345 |
0.0009950503 |
0.0000000000 |
0.0040773320 |
0 |
−1 |
0.00000000 |
0.0483962733 |
0.0008464125 |
3 |
0.9842830996 |
0.0002101386 |
0.0009899498 |
0.0000000000 |
0.0039890731 |
0 |
−1 |
0.00000000 |
0.0476138039 |
0.0008464125 |
4 |
0.9792349051 |
0.0002793102 |
0.0009849432 |
0.0000000000 |
0.0039030165 |
0 |
−1 |
0.00000000 |
0.0468439855 |
0.0008464125 |
5 |
0.9742781992 |
0.0003480564 |
0.0000000000 |
0.0002032802 |
0.0038221439 |
0 |
0 |
0.00250000 |
0.0460866134 |
0.0008464125 |
6 |
0.9701841153 |
0.0004167162 |
0.0000000000 |
0.0002024406 |
0.0037432174 |
0 |
0 |
0.00250000 |
0.0453414865 |
0.0008464125 |
7 |
0.9661701006 |
0.0004850729 |
0.0000000000 |
0.0002016176 |
0.0036661811 |
0 |
0 |
0.00250000 |
0.0446084068 |
0.0008464125 |
8 |
0.9622342426 |
0.0005531322 |
0.0000000000 |
0.0002008109 |
0.0035909810 |
0 |
0 |
0.00250000 |
0.0438871795 |
0.0008464125 |
9 |
0.9583746833 |
0.0006208996 |
0.0000000000 |
0.0002000200 |
0.0035175649 |
0 |
0 |
0.00250000 |
0.0431776130 |
0.0008464125 |
10 |
0.9545896174 |
0.0006883806 |
0.0000000000 |
0.0001992447 |
0.0034458821 |
0 |
0 |
0.00250000 |
0.0424795187 |
0.0008464125 |
11 |
0.9508772907 |
0.0007555805 |
0.0000000000 |
0.0001984844 |
0.0033758841 |
0 |
0 |
0.00250000 |
0.0417927112 |
0.0008464125 |
12 |
0.9472359982 |
0.0008225044 |
0.0000000000 |
0.0001977389 |
0.0033075069 |
1 |
0 |
0.00250000 |
0.0411170080 |
0.0009071625 |
13 |
0.9436593010 |
0.0008939558 |
0.0000000000 |
0.0001970078 |
0.0032407225 |
1 |
0 |
0.00250000 |
0.0404522295 |
0.0009071625 |
14 |
0.9401504048 |
0.0009651219 |
0.0000000000 |
0.0001962908 |
0.0031754866 |
1 |
0 |
0.00250000 |
0.0397981991 |
0.0009071625 |
15 |
0.9367077416 |
0.0010360077 |
0.0000000000 |
0.0001955875 |
0.0031117567 |
1 |
0 |
0.00250000 |
0.0391547431 |
0.0009071625 |
16 |
0.9333297866 |
0.0011066185 |
0.0000000000 |
0.0001948977 |
0.0030494917 |
1 |
0 |
0.00250000 |
0.0385216905 |
0.0009071625 |
17 |
0.9300150566 |
0.0011769591 |
0.0000000000 |
0.0000194021 |
0.0029891516 |
1 |
1 |
0.00025000 |
0.0378988730 |
0.0011521489 |
The five-month offset is on every row. 보험나이 turns 1 at t = 12; 만나이 turns 1 at
t = 17. age_man = −1 for t < 5 because the insured does not yet exist, and the model
returns q = 0 and i_j = 0 from that fact rather than from a special case.
The months where the product does something#
|
What happens |
|---|---|
0 |
Issue. Acquisition expense and initial commission fall; |
1–4 |
Pre-birth. Premium on three streams, the void decrement, |
5 |
Birth. The 태아보장기간 limbs pay ₩47,000 per birth all at once, plus one twelfth of the ₩63,450 신생아 block; every child-life cover switches on; |
12 |
보험나이 turns 1; renewal commission starts |
17 |
The 태아 module’s cover and premium both end; 만나이 turns 1; |
36, 72, … |
The 3년만기 liability block renews; the 누수 limb is off for three months |
239 → 240 |
납입완료. Premium and renewal commission stop; the 해약공제액 is long since released; |
1200 |
The 100세 계약해당일. Nothing is paid; |
|
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|---|
17 |
0.9311920157 |
26,040.4216 |
130.3535 |
3,512.4563 |
6.7821 |
177.0176 |
1,685.0952 |
781.2126 |
18,783.2542 |
120 |
0.7926463831 |
21,873.0675 |
79.3435 |
1,353.1380 |
15.6820 |
1,149.8680 |
1,480.1460 |
656.1920 |
15,651.7364 |
239 |
0.7675760087 |
20,562.2638 |
183.5349 |
1,515.4096 |
106.0073 |
344.4363 |
1,483.5920 |
616.8679 |
14,908.0252 |
240 |
0.7674946541 |
0.0000 |
183.5125 |
1,515.2490 |
106.2627 |
2,726.2032 |
456.1827 |
0.0000 |
-6,391.6508 |
241 |
0.7669843661 |
0.0000 |
183.3875 |
1,514.2415 |
106.3913 |
2,729.4233 |
456.6323 |
0.0000 |
-6,393.3820 |
360 |
0.7078397483 |
0.0000 |
420.1765 |
1,703.7898 |
210.9298 |
3,069.2282 |
512.8615 |
0.0000 |
-7,124.0431 |
600 |
0.5935620502 |
0.0000 |
2,415.7974 |
2,921.8469 |
1,143.9560 |
3,634.3597 |
639.0498 |
0.0000 |
-12,923.9553 |
720 |
0.5298765721 |
0.0000 |
4,738.1131 |
4,570.1874 |
2,608.6828 |
3,560.3727 |
695.4165 |
0.0000 |
-19,465.9226 |
1080 |
0.1441715821 |
0.0000 |
2,342.3611 |
7,506.8138 |
8,685.6915 |
519.2086 |
342.7324 |
0.0000 |
-21,825.3293 |
1140 |
0.0614770783 |
0.0000 |
920.2036 |
3,665.8156 |
1,110.9823 |
40.1461 |
161.3576 |
0.0000 |
-6,998.6611 |
1199 |
0.0161892160 |
0.0000 |
223.1971 |
1,078.0805 |
7.9723 |
0.1737 |
46.8367 |
0.0000 |
-1,662.7690 |
1200 |
0.0157346742 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
And the account, at the nodes the 상품요약서 publishes and the model must reproduce
(check_refund_grid()):
|
years |
|
|
|
|
|
[S2] published |
|---|---|---|---|---|---|---|---|
0 |
0 |
0 |
0.00000000 |
0.0000 |
364,000.0000 |
0.0000 |
— |
12 |
1 |
336,000 |
0.00000000 |
0.0000 |
312,000.0000 |
252,000.0000 |
0.0% |
36 |
3 |
1,008,000 |
0.45600000 |
459,648.0000 |
208,000.0000 |
667,648.0000 |
45.6% |
60 |
5 |
1,680,000 |
0.62500000 |
1,050,000.0000 |
104,000.0000 |
1,154,000.0000 |
62.5% |
84 |
7 |
2,352,000 |
0.66980000 |
1,575,369.6000 |
0.0000 |
1,575,369.6000 |
— |
120 |
10 |
3,360,000 |
0.73700000 |
2,476,320.0000 |
0.0000 |
2,476,320.0000 |
73.7% |
180 |
15 |
5,040,000 |
0.78300000 |
3,946,320.0000 |
0.0000 |
3,946,320.0000 |
78.3% |
240 |
20 |
6,720,000 |
0.82600000 |
5,550,720.0000 |
0.0000 |
5,550,720.0000 |
82.6% |
360 |
30 |
6,720,000 |
1.01200000 |
6,800,640.0000 |
0.0000 |
6,800,640.0000 |
101.2% |
480 |
40 |
6,720,000 |
1.22500000 |
8,232,000.0000 |
0.0000 |
8,232,000.0000 |
122.5% |
600 |
50 |
6,720,000 |
1.44100000 |
9,683,520.0000 |
0.0000 |
9,683,520.0000 |
144.1% |
720 |
60 |
6,720,000 |
1.58900000 |
10,678,080.0000 |
0.0000 |
10,678,080.0000 |
158.9% |
1140 |
95 |
6,720,000 |
0.16001230 |
1,075,282.6560 |
0.0000 |
1,075,282.6560 |
16.0% |
1200 |
100 |
6,720,000 |
0.00000000 |
0.0000 |
0.0000 |
0.0000 |
0.0% |
The 해약공제액 is released linearly over surr_chg_period() = 84 months and is nil from
t = 84. The surrender value crosses premiums paid (₩6,720,000) between t = 240 and
t = 360 — exactly as [S2]’s published grid says it does at about year 30 — and collapses
to nil at 만기, there being no 만기환급금 on the protection part.
Hand traces#
Month 0 — issue, and the insured does not exist. l(0) = l_P(0) = 1, l_W(0) = 0,
born(0) false.
premiums(0) = ( 28,000 + 3,000 ) × 1.0 × 1 = 31,000.0000
every child-life benefit = 0.0000 [born(0) is false]
claims_void(0) = ( cum_prem_pp(0) + prem_foetal_paid_pp(0) ) × pols_void(0)
= ( 0 + 0 ) × 0.0010055425391276573 = 0.0000
claims_lapse(0) = ( CV(0) + U(0) ) × pols_lapse(0)
= ( 0 + 0.5 × 31,000 ) × 0.004260729152353977
= 15,500 × 0.004260729152353977 = 66.0413018615
claim_expenses(0) = 30,000 × ( 0 × 1 + 0 + 0.0010055425391276573 )
= 30.1662761738
expenses(0) = ( 327,600.0000000000 − 212,940.0000000000 ) × 1
+ 400 × 1.0 × 1 + 0.05 × 31,000
= 114,660.0000000000 + 400.0000 + 1,550.0000 = 116,610.0000000000
commissions(0) = 212,940.0000000000 × 1 = 212,940.0000000000
net_cf(0) = 31,000.0000 − 66.0413018615 − 30.1662761738
− 116,610.0000000000 − 212,940.0000000000 = −298,646.2075780353
Note that claims_void(0) is zero and not nil by accident: no premium has yet been
collected at the start of month 0, so there is nothing to refund. The decrement is there —
0.10055% of contracts are voided in the month — and it costs nothing.
Decrements, month 0, in the order void → waiver → mortality → lapse:
v(0) = 1 − (1 − 0.012)^(1/12) = 0.0010055425391276573
ω(0) = 1 − (1 − 0) (1 − 0.0008464125) = 0.0008464125
ω_m(0) = 1 − (1 − 0.0008464125)^(1/12) = 0.00007056175284536614
e(0) = 1 × ( 1 − 0.0010055425391276573 ) × 0.00007056175284536614
= 0.9989944574608723 × 0.00007056175284536614 = 0.00007049080000124472
q_m(0) = 0 [no insured yet]
w_m(0) = 1 − 0.95^(1/12) = 0.004265318777560645
pols_void(0) = 1 × 0.0010055425391276573 = 0.0010055425391276573
pols_death(0) = ( 1 − 0.0010055425 ) × 0 = 0.0000000000
pols_lapse(0) = ( 0.9989944574608723 − 0.0000704908 ) × 1 × 0.004265318777560645
= 0.9989239666608711 × 0.004265318777560645 = 0.0042607291523540
l_P(1) = 0.9989239666608711 × 1 × ( 1 − 0.004265318777560645 )
= 0.9946632375085172
l_W(1) = ( 0 + 0.00007049080000124472 ) × 1 = 0.0000704908000012
l(1) = 0.9946632375085172 + 0.0000704908 = 0.9947337283085184
and the roll-forward closes: 1 − 0.9947337283085184 = 0.0052662716914816, against
0.0010055425391277 + 0 + 0.0042607291523540 = 0.0052662716914816.
Month 5 — birth, and the one month in which the contract loses money after issue.
l(5) = 0.9746262555490346, l_P(5) = 0.9742781992, born(5) true, age_man(5) = 0.
premiums(5) = 31,000 × 1.0 × 0.9742781992 = 30,202.6241744982
Per policy in force, at 만나이 0:
benefit_DISABILITY = 100,000,000 × 0.12 × 0.000008355800662718238
+ 10,000,000 × 0.15 × 0.00021692529081551726
= 100.2696079526 + 325.3879362233 = 425.6575441759
benefit_DIAGNOSIS = 10,000,000 × 0.000015001237642309206 × 1 × 1
+ 2,000,000 × 0.000002500034375629845
+ 10,000,000 × 0.0000033333944460256504
+ 10,000,000 × 0.00000016666681945665118
= 150.0123764231 + 5.0000687513 + 33.3339444603 + 1.6666681946
= 190.0130578292
benefit_SURGERY = 5,000,000 × ( 0.85 × 0.000015001237642309206
+ 0.50 × 0.0000033333944460256504
+ 0.70 × 0.00000016666681945665118 )
= 5,000,000 × 0.000014534415992595306 = 72.6720799630
benefit_HOSPITAL = 40,000 × ( 0.10 + 2.40 ) / 12 × 0.92
= 40,000 × 0.2083333333333 × 0.92 = 7,666.6666666667
benefit_EVENT = 400,000 × 0.0003339460107422143
+ 200,000 × 0.0005013802940021517
= 133.5784042969 + 100.2760588004 = 233.8544630973
benefit_LIABILITY = 0.0003339460107422143 × 600,000 × 1.0 × 1.0
= 200.3676064453
benefit_NEONATAL = 47,000 + 63,450 / 12 = 47,000 + 5,287.50 = 52,287.5000000000
Weighted by l(5) = 0.9746262555490346, those give the row’s 414.8570184264, 185.1917150575,
70.8281171773, 7,472.1346258759, 227.9206997120, 195.2835300031 and 50,960.7703370201.
Then
claims_death(5) = ( A(5) + U(5) ) × pols_death(5)
= ( 105,000.0000 + 15,500.0000 ) × 0.00020328016703563597
= 120,500 × 0.00020328016703563597 = 24.4952601278
claims_lapse(5) = ( 0 + 15,500 ) × 0.003822143851874877 = 59.2432297041
claims_void(5) = 0 [t = b, v(5) = 0]
claim_expenses(5) = 30,000 × ( 0.0014155547402482371 × 0.9746262555490346
+ 0.00020328016703563597 + 0 )
= 47.4875094915
expenses(5) = 400 × 1.0082852288053106 × 0.9746262555490346
+ 0.05 × 30,202.6241744982
= 393.0805028304 + 1,510.1312087249 = 1,903.2117115553
commissions(5) = 0.0000
commissions(5) is the trap in this row. Renewal commission is 0.03 × premiums(t) for
12 <= t <= prem_end() only, so it is nil here and worth about ₩900 a month if the lower
bound is dropped.
net_cf(5) = 30,202.6241744982
− ( 414.8570184264 + 185.1917150575 + 70.8281171773 + 7,472.1346258759
+ 227.9206997120 + 195.2835300031 + 50,960.7703370201 )
− 24.4952601278 − 59.2432297041
− 47.4875094915 − 1,903.2117115553 − 0.0000
= 30,202.6241744982 − 61,561.4237541510 = −31,358.7995796528
₩50,960.77 of that is the 태아 module in a single month, and it is 85.6% of the month’s ₩59,526.99 of morbidity outgo. The neonatal cost is not spread: the 태아보장기간 limbs are paid on events of the pregnancy and the delivery and they are paid at birth.
Month 17 — the 태아 module ends, and 만나이 turns 1. Two structural things happen in the
same month and they pull in opposite directions. l(17) = 0.9311920157360853,
l_P(17) = 0.9300150566, age(17) = 1, age_man(17) = 1.
P(17) = 28,000 only [foetal_prem_end() = 16]
premiums(17)= 28,000 × 1.0 × 0.9300150566 = 26,040.4215845963
benefit_HOSPITAL = 40,000 × ( 0.13 + 1.10 ) / 12 × 0.92
= 40,000 × 0.1025 × 0.92 = 3,772.0000000000
against 7,666.6667 at 만나이 0 — hosp_dis falls 2.40 → 1.10 days a year
benefit_EVENT = 400,000 × 0.0007531116566323881
+ 200,000 × 0.000417624589193033
= 301.2446626530 + 83.5249178386 = 384.7695804916
against 233.8545 — fracture rises 0.004 → 0.009
benefit_LIABILITY = 0.0005013802940021517 × 600,000 = 300.8281764013
against 200.3676 — liability rises 0.004 → 0.006
benefit_NEONATAL = 0.0000 [t = f = 17, the module has ended]
claims_death(17) = ( A(17) + U(17) ) × pols_death(17)
= ( 335,553.3333333334 + 14,000.0000 ) × 0.000019402056913845515
= 349,553.3333333334 × 0.000019402056913845515 = 6.7820536678
claims_lapse(17) = ( 45,220.0000 + 14,000.0000 ) × 0.002989151566722004
= 59,220 × 0.002989151566722004 = 177.0175557813
expenses(17) = 400 × 1.028450933381417 × 0.9311920157360853
+ 0.05 × 26,040.4215845963
= 383.0741190965 + 1,302.0210792298 = 1,685.0951983263
commissions(17) = 0.03 × 26,040.4215845963 = 781.2126475379
net_cf(17) = 26,040.4215845963 − 7,257.1673721150 = 18,783.2542124813
U(17) is ₩14,000 and not ₩15,500, because the 미경과보험료 is half of that month’s
office premium and the 태아 stream has stopped. And the waiver rate steps up in the same
month: ω(17) = 1 − (1 − 0.0002452088)(1 − 0.0009071625) = 0.0011521489, the child’s limb
switching on as the 신생아 block — and with it the P코드 carve-out — ends.
Month 240 — 납입완료. l(240) = 0.7674946541379640, P(240) = 0, U(240) = 0,
ω(240) = 0, w(240) steps from 0.0010164337 to the ultimate 0.008.
premiums(240) = 0.0000
commissions(240) = 0.0000 [no renewal commission after 납입완료]
expenses(240) = 400 × 1.485947395978355 × 0.7674946541379640 + 0.05 × 0
= 594.3789583913 × 0.7674946541379640 = 456.1826730974
claims_lapse(240)= ( 5,550,720.0000 + 0 ) × 0.0004911440743415418 = 2,726.2032363291
claims_death(240)= ( 5,550,720.0000 + 0 ) × 0.000019143942790725917 = 106.2626661273
net_cf(240) = 0 − ( 459.6209777245 + 183.5124600595 + 63.8868013892
+ 1,515.2489675306 + 575.2275491970 + 244.5978916122 )
− 106.2626661273 − 2,726.2032363291
− 60.9075982374 − 456.1826730974
= −6,391.6508213043
The sign change is not gradual. net_cf(239) is +₩14,908.0252 and net_cf(240) is
−₩6,391.6508, a swing of ₩21,299.68 in one month. Four things move at once: the premium
stops (−₩20,562.26), renewal commission stops (+₩616.87), expense falls (+₩1,027.41 — the
premium-related maintenance of ₩1,028.11 going, against ₩0.70 more of inflating per-policy
maintenance) and claims_lapse jumps (−₩2,381.77) — because the ultimate lapse rate is
eight times the rate an instant before 납입완료 and the surrender value it is paid on is
now ₩5,550,720. From t = 240 there is not one positive month in the remaining eighty
years.
Policy year 1 in aggregate#
t = 0 … 11, spanning the pre-birth period, the birth and seven months of the 신생아 block.
Σ pols_if(t) = 11.6888828896.
Line |
Policy year 1 total |
|---|---|
|
362,213.7519 |
|
2,869.1771 |
|
1,280.7497 |
|
489.8319 |
|
51,677.7500 |
|
1,576.3138 |
|
1,350.5931 |
|
81,448.2301 |
|
257.5124 |
|
706.1779 |
|
0.0000 |
|
306.8991 |
|
477.6984 |
|
137,488.5297 |
|
212,940.0000 |
|
−130,655.7114 |
Benefit outgo of ₩141,963.2351 is 39.2% of year-1 premium, and 57.4% of it is the 태아
module. Against that, ₩327,600.0000 of acquisition expense and initial commission at
t = 0 — 10.57 months of the ₩31,000 first-year office premium — produce the
characteristic new-business strain.
Undiscounted totals over the whole 1,201-month projection#
Line |
Total |
|---|---|
|
651.7356 |
|
5,458,037.9345 |
|
957,652.5232 |
|
2,844,503.4398 |
|
1,094,506.2990 |
|
5,033,285.2166 |
|
466,414.7324 |
|
195,939.3565 |
|
106,330.7157 |
|
3,693,345.7287 |
|
2,695,713.6444 |
|
0.0000 |
|
306.8991 |
|
79,991.4163 |
|
1,009,668.2371 |
|
365,814.7255 |
|
−13,085,434.9998 |
Morbidity outgo is ₩10,698,632.2832 and account-driven outgo — death, lapse, maturity, void — is ₩6,389,366.2722; the four exits account for 0.0049757330 voids, 0.4688979472 deaths, 0.5103916457 lapses and 0.0157346742 maturities, summing exactly to one.
What the numbers say#
The shape is a hundred-year contract with a twenty-year premium in one line: a new-business strain of ₩298,646 at issue, one negative month at birth, a positive stretch of nearly twenty years averaging about ₩14,000 a month, and then eighty years of pure outgo with not a single positive month in it. Undiscounted, ₩5,458,038 of premium meets ₩17,087,999 of benefit and ₩1,455,474 of expense and commission, for a total of −₩13,085,435 — and that is not a defect in the projection but what such a contract looks like before discounting. Discounted at 2.75% the two sides balance at ₩31,079.59 a month.
Three of the totals are worth reading directly. claims_hospital is the largest benefit
line at ₩5,033,285 — 47.0% of all morbidity outgo and 92.2% of the whole premium collected.
That is what a ₩40,000-a-day 입원일당 written to 100세 costs on the shipped basis, and it is
the opposite of the chassis, where the diagnosis limbs dominate. claims_death at
₩3,693,346 is the second largest line and is not a death benefit at all: it is the
계약자적립액 plus the 미경과보험료 paid on a death 상법 제732조 forbids covering, and it
becomes the biggest single monthly outgo after about t = 700 because the account is then
₩10.7 million and mortality is finally material. claims_maturity is identically zero:
there is no 만기환급금 on the protection part and the shipped 환급률 taper reaches zero at
만기, so the 1.57% of policies that survive to the 100세 계약해당일 receive nothing.
Two more read against the product’s own history. The 태아 module costs ₩106,330.72 in
total — 0.9627 of its ₩110,450 per-birth cost, the shortfall being the 3.7% of contracts
already voided or lapsed by the time the block runs — and every won of it falls inside the
first thirteen months of a hundred-year contract. And the general-tier frac_open ledger
runs from 1.0000 to 0.4023 over the term: paediatric cancer incidence is two orders of
magnitude below the adult rate, so the ledger is almost untouched for thirty years and then
drains fast, which is the arithmetic behind R5’s premium-by-issue-age index — a 0세 issue
pays 100 against a 30세 issue’s 264 for the same cover, because the child’s premium is being
collected against eighty years of exposure that has not begun.
Valuation and reserve pointers#
This model projects gross, undiscounted liability cash flows. Every valuation layer below consumes them and is cited, never reproduced. Korea is unusual in running three of them at once and live.
IFRS 17 (K-IFRS 제1117호) has been mandatory since 2023-01-01 REG-R60. The fulfilment cash flows, the risk adjustment and the CSM all consume a stream of this shape and none is computed here. Two features bear directly on the measurement: the contract boundary question raised by the 갱신형 blocks inside a 비갱신형 core, recorded as unresolved; and the eighty paid-up years, which mean the CSM of a child policy is dominated by cash flows beginning two decades after issue — what makes the lapse assumption over the payment period worth so much, and what the supervisor moved against in 2024 R11 REG-R27.
K-ICS applies from the same quarter REG-R13 REG-R30. The 대량해지 shock and its 고환급형 test live in 보험업감독규정 [별표 22], which was not retrieved; everything resting on it is second-hand through REG-R36 and carries unverified REG-R26. It matters here because model points 4 and 5 are 무해지 forms, which is what the 고환급형 test is about.
해약환급금준비금 — the Korea-specific layer with no counterpart anywhere else in this repository REG-R11. Under IFRS 17 a profitable in-force block can carry a liability materially below the aggregate contractual surrender value, and the reserve quarantines the difference inside 이익잉여금 at company level, not contract level, under 감독규정 제6-11조의6 (and 제6-18조의6 on the non-life side). It stood at ₩23.7조 at end-2022 and ₩32.2조 at end-2023 REG-R11 REG-R36. On this product the gap it is built to catch is visible directly:
cv_pp(t)exceedscum_prem_pp(t)fromt = 353, which is a surrender obligation an IFRS 17 liability need not hold. Nokrlibmodel computes it.책임준비금 under 감독규정 제6-11조 REG-R10 and the 계약자적립액 under 제7-65조 and 제7-66조 REG-R18 REG-R19. This model reads a published surrender value and recovers the account from it: it runs neither the 순보험료식 recursion nor the 공시이율 reset, both of which are carried by reference to
WholeLife_KR_S.The 표준해약공제액 and the 해약공제기간 are computed here, at [별표 14] and 제7-66조 제1항제2호 REG-R20 REG-R19, because they bound the surrender value and the deductible acquisition cost and therefore change the cash flows. They are the only regulatory computation this model performs, and
check_surr_chg_cap()andcheck_acq_cost_cap()assert both bounds.Not applicable. 계약자배당 and the surplus-distribution machinery of 제6-11조의7 and 제6-13조 do not attach — the contract is 무배당 REG-R12 — and there is no 특별계정 REG-R15 and no 보증준비금 for a guarantee this product does not write.
Policyholder tax, not modelled. The premium is a 보장성보험료 attracting a 12% tax credit on up to ₩1,000,000 a year under 소득세법 제59조의4 REG-R57 — a credit, not a deduction, which is what makes the Korean after-tax comparison differ from every other market in this repository. The anchor cell’s ₩372,000 of first-year premium sits inside the cap. Benefits are not projected net of policyholder tax.
예금자보호 to ₩100,000,000 per person per insurer since 2025-09-01, in a bucket that expressly excludes benefits payable because the term has ended REG-R52; the ₩50,000,000 of the 약관 wording retrieved here is the pre-2025 figure [S8]. A structural fact about the liability, not a cash flow.
Key sensitivities and model risks#
In rough order of leverage on a book of this product.
The morbidity basis is the whole model and it is std with one exception. Eleven causes at fourteen pivot ages, and the only published Korean child morbidity rate anywhere in the research is 일반상해 후유장해 발생률(3~100%) at 5세, 상해 1급 — 남자 0.0001823, 여자 0.0001163 [S1]. Everything else is a shape drawn around it, and no shipped row was reconciled to the one public reference grid there is — the 장기손해보험 참조순보험요율 display, published under 보험업법 제176조제9항 and reaching 연령 0 and 10 REG-R61, which this product’s pass did not open. A carrier’s own 적용위험률 stays out of reach either way: the 산출방법서 is an undisclosed 기초서류 REG-R2 and the life-side 참조순보험요율 is filed and not published REG-R4.
The two hospital-cash limbs carry 47.0% of all morbidity outgo, and they are driven by a day count, not a frequency.
hosp_disruns 2.40 days a year at 만나이 0, 0.55 at 5, 0.35 at 10 and 20.0 at 100 — a fifty-seven-fold range with a U-shape whose left arm is the infant peak and whose right arm is old age. The cap factor κ = 0.92 is a single number standing over a whole length-of-stay distribution the model does not carry.Expense inflation over a hundred years. 2% a year compounds to 7.24. Per-policy maintenance is ₩400 a month at issue and ₩2,898 at the 100세 계약해당일, it runs for the whole term rather than to 납입완료, and it is the largest single expense item in the projection. At 1% it would be ₩1,081.93 at the end and at 3% ₩7,687.45, a spread of seven times on the same charge. The assumption is not a detail on this product.
The lapse assumption over the payment period, and the supervisor agrees. The shipped
loglinearbasis converges to 0.1% at 납입완료;disclosedsits at 5.0/3.0/1.0% and then 0.5%. On model point 5 the two produce undiscountednet_cfof −₩8,061,541 against the anchor’s −₩13,085,435, and on a 무해지 form the difference is worth still more becauseclaims_lapseis identically zero over the period. This is the sensitivity the 2024 계리가정 guideline exists to constrain R11 REG-R27 and the reason it is a supervisory matter at all.The 계약자’s mortality is a second, uncorrelated exposure, and it is the larger waiver limb for the first fifteen years. At
t = 0the 계약자’s limb is 0.0008464125 a year and the child’s is zero; att = 239they are 0.0038416625 and 0.0003484597. The waiver’s whole value is concentrated in the twenty years in which a 33-to-53-year-old parent might die or become severely disabled, which is why the module is cheap enough to be compulsory — and why an error inpayer_agemoves more than an error in any child incidence rate.payer_disab_ratio = 0.25is pure std: no Korean disability incidence table is public.The 태아 module’s severity is a length-of-stay question and the file has no published anchor. The incubator limb is ₩50,000 × (days − 2) capped at 60 and the perinatal-cash limb ₩10,000 × (days − 3) capped at 120 [S1] [S8]; the shipped 8.0 and 7.5 expected paid days are std. The supervisor’s own worked claim ran to ₩4,200,000 of day benefits on a 32-week, 1.84 kg birth R3, against the module’s ₩110,450 expected cost per birth — so the tail is two orders of magnitude above the mean and the module is a frequency assumption dressed as a severity one.
The
disab_severityof 0.12 carries a ₩100,000,000 sum insured. The 기본계약 is the largest single 보험가입금액 in the contract and the most heavily standardized parameter attached to it. The accident limb alone costs ₩555,177.98 over the term at 0.12; read as a lump sum at the full 가입금액 it would cost ₩4,626,483.18, 85% of the whole premium collected.The term, not the age. R5’s own index puts a 0세 issue at 100 against a 30세 issue’s 264 for the same cover over 20년납 to 100세 만기, and the two short-horizon cells are the two whose premiums come closest: model point 8 at +0.57% and model point 9 — the 30세만기 female cell — at −1.90%, ₩3,026 shipped against ₩2,968.47 computed, so that it and model point 5 are the only two cells whose shipped premium is above its own equivalence premium. Across the ten the computed premium runs from 11.75% below the shipped figure to 43.78% above it. The term extension of 2011 is what makes this product hard to price and easy to under-price R5.
Longevity is the tail risk, not mortality. Only 1.57% of policies reach the 100세 계약해당일 on the shipped basis, yet
claims_hospitalpeaks at ₩10,877.56 att = 965andclaims_deathat ₩15,452.17 att = 1013— andclaims_deathis the largest single column in every one of the 166 months fromt = 929tot = 1094(and again att = 1097andt = 1098), after which the in-force block has thinned so far thatclaims_hospitaltakes the lead back for the last eight years. The liability is concentrated in the ages where the survival assumption is least certain and where a std mortality construction is least defensible.The 실손 boundary could move. The reason this product has no indemnity limb is regulatory, not economic R9 R10, and a 5세대 실손 reform is under way REG-R31. A change to 감독규정 제7-63조제2항제1호 would change what an 어린이보험 is.
Known modeling pitfalls#
Each of these is a mistake a competent modeller would actually make on this product, and each is checkable against the shipped model.
Attaching cover at the 계약일 rather than at birth. Every benefit on the child’s own life must be identically zero for
t < b, and the insured’s mortality with it [S8 제54조] R2 R3.check_cover_at_birth()asserts it. A model that lets the hospital or disability limbs run fromt = 0adds five months of the infant rate — the highest in the whole table — to a period in which nobody is at risk, and overstates year-1 benefit outgo by about 30%.Treating the pre-birth void as a lapse. 유산 or 사산 makes the contract 무효 and returns every premium paid on both streams [S8 제56조] [S9]. On the 표준형 the surrender value at
t = 4is nil and the refund is ₩122.13; on a 무해지 point the surrender value is nil for twenty years and the refund is unchanged. Netting the void intoclaims_lapsedestroys the refund entirely and loses a decrement from the roll-forward.Running the projection on one age. 보험나이 and 만나이 differ by exactly
bmonths for the life of a foetal contract. Reading the decrement tables at 보험나이 ages the insured by five months everywhere, and — worse — makesage_mannon-negative before birth, which quietly re-enables the covers the birth gate exists to suppress. The contract expires when the insured is 99 years and 7 months old, andage_man(1200) = 99.Applying the monthly conversion to a day count.
hosp_accandhosp_disare expected days per policy year.1 − (1 − 2.40)^(1/12)is a complex number, and1 − (1 − 0.55)^(1/12)is a real number that is simply wrong. Divide by twelve.benefit_pp(t, "HOSPITAL")must never route throughinc_rate_mth.Re-testing the 면책기간 at the claim date. The under-15 disapplication is decided at the 계약일 [S3] [S11]. A contract issued at 계약나이 0 has no cancer waiting period at any point in its hundred-year life, including the eighty-five years in which the insured is an adult. A model that switches the 90 days back on at 보험나이 15 is modelling a contract nobody sells.
Applying a 감액 to a foetal contract.
reduction_mths()returns zero on a 태아 contract whatever the model point says, because the 2015 변경권고 inserted 「단, 피보험자가 보험가입 당시 태아인 경우에는 보험금의 100%를 지급합니다」 across 17 carriers and 56 products R2 [S8]. Readingreduction_mthsstraight off the model point re-imposes a reduction the supervisor removed.Letting the child’s waiver limb run over the 신생아 block. 「출생전후기에 기원한 특정 병태(P코드) 진단시 납입면제를 적용하지 않음」 [S2]. The covers most likely to pay in the first year of a foetal contract are precisely the ones that cannot stop the premium. The signature is the step in
waiver_ratefrom 0.0009071625 att = 16to 0.0011521489 att = 17; a model without the carve-out has no step.Modelling the parent as a benefit rather than as a decrement — or the reverse. On the 생명보험 chassis the 계약자’s death is a waiver trigger in the main clause [S10 제22조제1항]; on the 손해보험 chassis the same economics arrive as a compulsory 부양자 death rider paying a lump sum or an education annuity [S5] [S11]. They are not interchangeable: one removes a premium stream, the other adds an outgo, and their expected values differ by more than an order of magnitude.
Running the waiver after 납입완료.
ω(240) = 0. A waiver of premium on a contract with no premium transfers policies into a compartment whose only remaining difference is that it is not exposed to lapse — silently suppressing eighty years of lapses, and with them the ₩2,695,714 ofclaims_lapsethat is 15.8% of all benefit outgo.Exposing the waived compartment to lapse. The mirror error.
pols_lapse(t)is drawn frompols_payalone;check_waiver_split()andcheck_pols_roll_fwd()both fail if it is not.Treating the 기본계약 as a lump sum. It is 보험가입금액 × 장해지급률 on a continuous 3~100% band R12 [S1] [S2] [S11]. The accident limb costs ₩555,177.98 over the term at
disab_severity = 0.12and ₩4,626,483.18 at severity 1.0. The error is a factor of 8.3 and it lands on the largest sum insured in the contract.Weighting the
frac_openledgers bypols_if. They are per policy, not per block. Weighting them by the in-force probability measures the block’s consumption and defers the exhaustion forever, which on a hundred-year term is worth a great deal:frac_open(1200, cancer)is 0.4023261296, not something near 1.Charging renewal commission from
t = 1, or after 납입완료. It runs12 <= t <= 239only. The first error is worth about ₩900 a month in months 1–11; the second is worth eighty years of commission on a premium nobody pays.Paying a 만기환급금. There is none on the protection part [S1] [S2].
claims_maturityis a column of zeros andrefund_ratio(1200)is 0.0. A model that paysav_ppat maturity without the taper pays ₩10,678,080 to the 1.57% of policies that get there.Starting the 계약자적립액 at the surrender charge. The published grid is 「순보험료식 계약자적립액에서 해약공제액을 공제한 금액」 [S2], already net and floored at zero, so adding the unamortised charge back where the floor binds gives an account of ₩364,000 at
t = 0on a contract that has collected nothing. The cap atnet_prem_ratio × cum_prem_pp(t)is what makesav_pp(0) = 0;check_av_bounds()asserts the three inequalities.Computing the notional 보험가입금액 at the insured’s own age. [별표 15] 제9호 is evaluated at the 기준연령 요건, 남자 만 40세 REG-R21 REG-R9 제1-2조제2호. At 만나이 5 the mortality rate is 0.00012 and the [별표 14] formula limb comes out at ₩12,380,087.45, 442.1 months of premium; at 40 it is ₩1,575,064.09, or 56.25 months. Neither binds: the FSC’s thirteen-month reading of the same cap does REG-R29, at ₩364,000.00, and the 계약체결비용 at 90% of it at 11.70 months.
Dropping the void or the maturity from the roll-forward. There are four exits, not two.
check_exit_total()requires them to sum topols_if_init()over the projection — 0.0049757330 + 0.4688979472 + 0.5103916457 + 0.0157346742 = 1 exactly.Interpolating the incidence grid linearly. The rates span two or more orders of magnitude between adjacent pivots; log-linear interpolation reproduces every pivot exactly and a linear one is wrong by a factor of two mid-span. The published 0.0001823 at 만나이 5 must come back to its last digit, which it does only because the interpolator short-circuits at a pivot.
Assuming the female rate is below the male. The comparison board shows the sex relativity with no fixed sign — four carriers price the female higher and seven lower, the spread running 62% to 114% [S11] — so the male-rate convention on a 태아 contract R3 [S8] no longer implies a refund on the birth of a girl. The composite does not model the true-up, and a model that assumes its direction is asserting something the market contradicts.
Monthly rounding does not re-add. The displayed rows are rounded to four decimals; the year-1 and whole-projection totals are sums of unrounded values, and the two differ in the last displayed digit. Assert against the unrounded aggregation.