The LTC_JP_S Model#
Reference liability cash flow model for Japanese private nursing-care insurance.
LTC_JP_S is the executable counterpart of
products/nursing_care/technical-notes.md in the lifelib-products library. It
projects gross best-estimate liability cash flows for a single-policy model point of
介護保険 (kaigo hoken) on the 公的介護保険連動型 (public-scheme-linked) design: office
premiums, a 介護一時金 (care lump sum) on first satisfaction of a 要介護 threshold, a
介護年金 (care annuity) paid annually in advance from a higher threshold and capped at a
stated number of instalments, a 保険料払込免除 (premium waiver) from a lower threshold
than either, maintenance and claim expenses, and commission.
The structural difference from Medical_JP_S, the third-sector chassis these
notes state their deltas against, is what the model has to represent. medical is
frequency x severity x limit — a daily amount times paid days, capped per
hospitalization and again in aggregate. Nursing care is incidence into an absorbing
state: a three-state chain (healthy, in care, dead) whose entry is certified by a
municipality, whose exit in the base run is only death, and whose payment counter
genuinely binds. There is no day ledger of any kind here, no 支払限度日数 machinery, and
no agg_days_* cells. Four further absences are product facts rather than gaps:
no surrender value, so cv_pp does not exist and a lapse pays nothing; no
自動振替貸付, because there is nothing to lend against; no death benefit, so
claims_death does not exist; and no maturity, because the cover is whole of
life.
Spaces. The model contains two:
DataReads the five 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. t is the policy month, t = 0, 1, ...,
proj_len() - 1, and month t runs from t to t + 1 months after the 契約日.
Office premium and maintenance expense fall at the start of the month, the lump sum,
the annuity instalment and the claim-handling expense at the end; then care incidence,
then mortality, then lapse, then the benefit-driven termination on the last permitted
annuity instalment. Acquisition expense and initial commission fall at t = 0. The
annuity is paid in advance: its first instalment falls on the entry month itself.
Cover is whole of life, so the projection runs to the terminal age of the mortality
table — 116 for males and 118 for females.
What is sourced and what is not. The contractual mechanics are sourced: the
either/or public-certification and company-basis trigger, the once-only lump sum that
does not terminate the contract, the survival-tested annuity in advance with its
ten-instalment cap and retroactive extinction, the waiver firing one grade below the
lump sum and two below the annuity, and the outright nil surrender value. Everything
quantitative is a standardization. No carrier publishes 予定発生率, 予定利率 or
予定死亡率 for this product, and the regulator confirms there is nothing standard to
publish for 第三分野 business, so the office premium is a model point input rather
than a computed quantity, and the incidence basis shipped here is constructed in
public from the 認定率 and grade composition of 介護保険事業状況報告. The mortality table is
likewise a [std] construction: 第三分野標準生命表2018 is free to read but its
publisher’s site terms prohibit reproduction, so mort_table.csv is a log-linear
graduation through the rates the library quotes and attributes, never a copy. 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, covering both sexes, issue ages 40 to 79, the sub-65 特定疾病 gate with and without the company-basis limb, the state-tested annuity with a non-zero recovery rate, the 認知症一時金特約, the simplified-underwriting 1-year 不担保期間, a five-instalment annuity, a lower pair of benefit thresholds, and the anti-selective lapse module switched on. Model point 1 is the anchor cell of the worked example in the technical notes and reproduces it to the precision the notes display.
Verification. tests/test_nursing_care_jp.py asserts the notes’ four-row worked
example and its policy-year-1 aggregate, the roll-forward and nesting identities, and
each of the notes’ known modelling pitfalls.
Example
>>> import modelx as mx
>>> model = mx.read_model("products/nursing_care/LTC_JP_S")
>>> model.Projection[1].result_cf()