The Cancer_JP_S Model#
Reference liability cash flow model for Japanese がん保険 (cancer insurance).
Cancer_JP_S is the executable counterpart of
products/cancer/technical-notes.md in the lifelib-products library. It projects
gross best-estimate liability cash flows for a single-policy model point of the
標準化された composite described in products/cancer/product-spec.md: a whole-of-life,
無配当・無解約払戻金型 third-sector contract paying a repeating がん診断一時金, a reduced
上皮内新生物 tier, an unlimited-day がん入院給付金, がん手術給付金, a monthly がん治療給付金 under a
60-month ledger, がん通院給付金 and a 先進医療 reimbursement, with the premium waived from the
first invasive diagnosis.
The structural difference from the third-sector chassis. Medical_JP_S projects a
single in-force population and reads a hospitalisation incidence off it. A cancer model
cannot: the diagnosis benefit repeats on a two-year cycle, the inpatient benefit has no
day limit and the treatment benefit pays by the month, so all three run on how long the
insured lives after diagnosis. This model therefore carries three states — never
diagnosed, diagnosed and inside the two-year cycle, diagnosed and eligible again — and
needs a post-diagnosis survival basis as well as an incidence basis. There is no L1
per-hospitalization day ledger, no 通算 lifetime day ledger and no benefit-driven
termination anywhere in it; importing them from the medical chassis caps a benefit every
retrieved source says is uncapped.
Spaces. The model contains two:
DataReads the seven input CSVs and holds their filename References. It takes no parameters, so each file is read once per model.
ProjectionThe by-policy projection, parameterized by
point_id:Projection[1]is an ItemSpace projecting model point 1. It reaches the input tables through itsdataReference, which resolves to the singleDataSpace.
The split matters for more than tidiness. Because Projection is parameterized, every
Projection[N] is a separate ItemSpace with its own cells cache; readers placed there
would re-read every file for every policy. In Data they are evaluated once, however
many policies are projected.
Input data is external: CSVs in the model folder’s parent directory, read at run time rather than stored inside the model. The model folder itself holds no data, so the model and its inputs must travel together.
Projection basis. Monthly steps, the notes’ base grid, and monthly by construction
rather than by approximation: the 90-day waiting period is three months of the grid, the
treatment benefit’s unit of payment is the calendar month, and the premium mode is 月払
at every carrier in the composite. t is the policy month, t = 0, 1, ...,
proj_len() - 1. Premium and maintenance expense fall at the start of month t; every
benefit and the claim-handling expense at the end; decrements at the end, mortality then
lapse. Acquisition expense and initial commission fall at t = 0. Cover is whole of
life and runs to the terminal age of 第三分野標準生命表2018 — 116 male, 118 female — so the
anchor cell projects 924 months.
What is sourced and what is not. The contractual mechanics are sourced: the 90-day waiting period as a hard zero, the two-year repeat cycle measured from the previous payment trigger, 上皮内新生物 as a separate once-only tier that does not trigger the waiver, the absence of any day limit and of any surrender value, and the premium waiver on first invasive diagnosis. The incidence basis is genuinely sourced too — 全国がん登録 publishes 罹患率 by five-year age band — but its sex split is a two-point interpolation, and the survival, relapse, treatment-month, outpatient and 先進医療 assumptions have no public source at all. The mortality table shipped here is a [std] construction anchored on 第三分野標準生命表2018 男 q(40) = 0.00076 and is not a copy of that table, whose publisher’s terms prohibit redistribution. This model is a mechanics demonstration, not a pricing or reserving result. Replace the assumption tables with company data before drawing any conclusion from the output.
Model points. Eight. Point 1 is the anchor cell of the worked example in the
technical notes; the others exercise the female incidence limb and the 118 terminal age,
the 10年更新 定期 chassis flag with repeat_conditioned on, the ¥5,000 course with no
先進医療 rider and a treatment cap that binds early, both ends of the 20-75 issue-age range,
the 65歳払済 premium period, a no-waiver design in which premiums ride on pols_if and
diagnosed lives can lapse, and the がん退院一時金 rider.
Verification. tests/test_cancer_jp.py asserts the notes’ six-row worked example
and its policy-year-1 aggregates, the ¥16,035.00 of benefit per diagnosed life-month, the
waiting period as a hard zero, the premium riding on pols_healthy rather than
pols_if, and the seven check_* roll-forward and ledger identities.
Example
>>> import modelx as mx
>>> model = mx.read_model("products/cancer/Cancer_JP_S")
>>> model.Projection[1].result_cf()