Bundled Actuarial Tables#
Lactuca ships a curated collection of life, disability and exit actuarial tables stored as
.ltk binary files. This page explains how to manage the bundled tables and provides a
complete reference for every table in the package.
Install tables once on disk with
Tables.install()(see Managing bundled tables below).Browse the full catalogue in the Table reference section.
Build a custom table with
TableBuilder(see Building Custom Table Files (.ltk)).
Warning
Data accuracy disclaimer. The actuarial tables bundled with this package are provided as a convenience and are believed to be faithful transcriptions of their original published sources. They are, however, supplied without any warranty — express or implied — as to their accuracy, completeness, or fitness for a particular purpose.
It is the user’s sole responsibility to:
verify each table against the official published source before relying on it;
assess its suitability for the intended application and jurisdiction;
comply with any applicable regulatory requirements.
The author accepts no liability for errors or omissions in the table data, nor for any decision made in reliance on it.
Managing bundled tables#
Tables are bundled with the package but must be written to disk as .ltk files before use.
The Tables class in lactuca.tables.data handles all install and discovery operations.
Installing tables#
Note
For generational tables, the cohort parameter (birth year) must be an integer in the
range 1900 – current year. Values outside this range raise a ValueError at
construction time.
from lactuca.tables.data import Tables
# Install all bundled tables to the default directory (Config.tables_path)
Tables.install()
# Install a single table by its Python variable name
Tables.install("PER2020_Ind_1o")
# Install multiple tables at once (list or tuple)
Tables.install(["PER2020_Ind_1o", "PASEM2020_Rel_1o", "DAV2004R_Agg_2o"])
# Install to a custom directory for this call only (overrides Config.tables_path)
Tables.install(tables_path="/srv/actuarial/tables")
# Overwrite existing .ltk files (default: overwrite=False, skips existing)
Tables.install("PER2020_Ind_1o", overwrite=True)
# The return value depends on the call form:
# - single string → bool (True = installed, False = skipped)
# - list or None → dict[str, bool] mapping each filename to its outcome
result = Tables.install(["PER2020_Ind_1o", "PASEM2020_Rel_1o"])
print(result) # {'PER2020_Ind_1o.ltk': True, 'PASEM2020_Rel_1o.ltk': False}
# False means the file already existed and was not overwritten
Discovering available and missing tables#
from lactuca.tables.data import Tables
# List all installable filenames (does not check disk — returns all known tables)
available = Tables.list_available()
print(available[:3]) # ['PER2020_Col_2o.ltk', 'PER2020_Col_1o.ltk', 'PER2020_Ind_2o.ltk']
# order reflects internal registration order; may vary across releases
# List .ltk filenames not yet present in Config.tables_path
missing = Tables.list_missing()
print(missing) # [] when all tables are installed, or e.g. ['IASS90.ltk']
# Check against a specific directory instead of the configured default
missing_custom = Tables.list_missing(tables_path="/srv/actuarial/tables")
# Install only the missing tables — safe to call repeatedly (idempotent)
result = Tables.install_missing() # dict[str, bool] — only newly installed tables appear
print(result) # {'IASS90.ltk': True} — {} when all tables were already present
Accessing a single table entry#
from lactuca.tables.data import Tables
# Retrieve a TableEntry by Python variable name (returns None if not found)
entry = Tables.get("PASEM2020_Rel_1o")
if entry is not None:
print(entry.varname) # 'PASEM2020_Rel_1o' (also the .ltk file stem)
print(entry.payload["table_name"]) # 'PASEM 2020 Relativo 1er orden'
entry.install() # install this table individually
The default install directory is actuarial_tables/ at the project root, controlled by
Config.tables_path. Each table is saved under its Python variable name; for example,
PER2020_Ind_1o is saved as PER2020_Ind_1o.ltk.
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
|
Table(s) to install; |
|
|
|
Override the on-disk filename for single-table installs (ignored for batch) |
|
|
|
Override install directory for this call |
|
|
|
Replace existing |
|
|
|
Raise on validation errors; |
See Configuration for how to change the default install path.
Need a table that is not listed here?#
If the table you need is not bundled with the package, you have two options:
Request it. Open a feature request on the Support page describing the table (name, source, jurisdiction, and intended use), and attach the data in a readable format — plain text, CSV, Excel, or any other tabular form. Requests without accompanying data cannot be prioritised. If the table is publicly available and relevant to the actuarial community, it may be added to a future release.
Build it yourself. Any table whose decrement structure fits one of the categories
described in Table Taxonomy — aggregate or select-ultimate, static or generational
— can be created with TableBuilder and saved as a .ltk file. See
Building Custom Table Files (.ltk) for a step-by-step guide.
Table reference#
Column guide:
File — Python variable name, also the
.ltkfile stem (e.g.PER2020_Ind_1o.ltk).Sex — sex coverage:
m/f= both sexes,m= male only,f= female only,u= unisex.Country — origin country or publishing organisation.
Type — taxonomy code (see Table Taxonomy): combines the class (
life/disability/exit) with the temporal–structure cell (agg–static,agg–gen-a,agg–gen-b,agg–gen-c,sel–static,sel–gen-a,sel–gen-b).Order — actuarial loading:
1st= prudential (pricing/reserves);2nd= best-estimate;—= not applicable.
Life tables#
File |
Sex |
Country |
Type |
Order |
|---|---|---|---|---|
|
m/f |
Spain (DGSFP) |
life · agg–gen-a |
2nd |
|
m/f |
Spain (DGSFP) |
life · agg–gen-a |
1st |
|
m/f |
Spain (DGSFP) |
life · agg–gen-a |
2nd |
|
m/f |
Spain (DGSFP) |
life · agg–gen-a |
1st |
|
m/f |
Spain (DGSFP) |
life · agg–static |
2nd |
|
m/f |
Spain (DGSFP) |
life · agg–static |
2nd |
|
m/f |
Spain (DGSFP) |
life · agg–static |
1st |
|
m/f |
Spain (DGSFP) |
life · agg–static |
1st |
|
m/f |
Spain (DGSFP) |
life · agg–static |
1st |
|
m/f |
Spain (DGSFP) |
life · agg–static |
— |
|
m/f |
Germany (DAV) |
life · agg–gen-b |
2nd |
|
m/f |
Germany (DAV) |
life · agg–gen-a |
1st |
|
m/f |
Germany (DAV) |
life · sel–gen-b |
2nd |
|
m/f |
Germany (DAV) |
life · sel–gen-a |
1st |
|
m/f |
USA (SOA) |
life · agg–static |
— |
|
m/f |
USA (SOA) |
life · agg–static |
— |
|
m/f |
USA (SOA) |
life · agg–gen-a † |
— |
|
m/f |
UK (CMIB) |
life · sel–static ‡‡ |
— |
|
m |
Chile (CMF) |
life · agg–gen-c |
— |
|
m |
Chile (CMF) |
life · agg–gen-c |
— |
|
f |
Chile (CMF) |
life · agg–gen-c |
— |
|
f |
Chile (CMF) |
life · agg–gen-c |
— |
|
f |
Chile (CMF) |
life · agg–gen-c |
— |
† GAM94_AA applies the discrete Scale AA improvement formula (flat age-indexed factors), placing it
structurally in the same class as type-a tables.
‡‡ AM92_AF92 is a static select-ultimate table using the CMI/UK Duration-0 convention
(start_duration=0): the first select year is duration=0 (unlike most tables where it is
duration=1).
Disability tables#
File |
Sex |
Country |
Type |
Order |
|---|---|---|---|---|
|
m/f |
Spain (DGSFP) |
disability · agg–static |
— |
|
m/f |
Spain (DGSFP) |
disability · agg–static |
— |
|
u ‡ |
Spain (SS) |
disability · agg–static |
— |
|
u ‡ |
Spain (SS) |
disability · agg–static |
— |
|
u ‡ |
Spain (SS) |
disability · agg–static |
— |
‡ sex_independent = True: these tables publish a single rate vector shared by both sexes.
Passing sex='m' or sex='f' both return the same rates. The unisex_blend parameter
has no effect on these tables.
Development and test tables#
The tables below are synthetic and are intended only for unit testing and development. They are not suitable for production actuarial calculations.
File |
Sex |
Type |
Notes |
|---|---|---|---|
|
m/f |
life · agg–static |
All-zero mortality; verifies annuity = financial annuity |
|
m |
life · agg–static |
Static life table, male only |
|
f |
life · agg–static |
Static life table, female only |
|
m/f |
life · agg–gen-a |
Synthetic generational life table — linear improvement formula; synthetic, not suitable for production |
|
m/f |
life · agg–gen-a |
Synthetic generational life table — discrete improvement formula; synthetic, not suitable for production |
|
m/f |
life · agg–gen-c |
Synthetic generational life table — projected improvement formula; synthetic, not suitable for production |
|
m/f |
life · sel–static |
Synthetic select-ultimate life table, select_period=2; synthetic, not suitable for production |
|
m/f |
life · sel–gen-c |
Synthetic select-ultimate life table — projected improvement formula, select_period=2, ages 0–100; synthetic, not suitable for production |
|
m/f |
life · sel–gen-d |
Synthetic select-ultimate life table — per-duration exponential MI, select_period=2, ages 0–100; synthetic, not suitable for production |
|
u |
life · agg–static |
Synthetic sex-independent life table; synthetic, not suitable for production |
|
m/f |
disability · agg–static |
Synthetic disability table |
|
m/f |
disability · agg–gen-a |
Synthetic generational disability table |
|
m/f |
disability · agg–gen-a |
Synthetic generational disability table — linear improvement formula, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · agg–gen-a |
Synthetic generational disability table — discrete improvement formula, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · agg–gen-b |
Synthetic generational disability table — year-indexed exponential improvement, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · agg–gen-c |
Synthetic generational disability table — projected improvement formula, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · sel–static |
Synthetic select-ultimate disability table, ages 20–65, select_period=2; synthetic, not suitable for production |
|
m/f |
disability · sel–gen-a |
Synthetic select-ultimate disability table — constant exponential MI, uniform across select durations, select_period=2, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · sel–gen-b |
Synthetic select-ultimate disability table — year-indexed MI, uniform across select durations, select_period=2, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · sel–gen-c |
Synthetic select-ultimate disability table — projected improvement formula, select_period=2, ages 20–65; synthetic, not suitable for production |
|
m/f |
disability · sel–gen-d |
Synthetic select-ultimate disability table — per-duration exponential MI, select_period=2, ages 20–65; synthetic, not suitable for production |
|
u |
disability · agg–static |
Synthetic sex-independent disability table, ages 20–65; synthetic, not suitable for production |
|
m/f |
exit · agg–static |
Synthetic exit/withdrawal table |
|
m/f |
exit · agg–gen-a |
Synthetic generational exit table |
|
m/f |
exit · agg–gen-a |
Synthetic generational exit table — linear improvement formula; synthetic, not suitable for production |
|
m/f |
exit · agg–gen-a |
Synthetic generational exit table — discrete improvement formula; synthetic, not suitable for production |
|
m/f |
exit · agg–gen-b |
Synthetic generational exit table — year-indexed exponential improvement, ages 0–100; synthetic, not suitable for production |
|
m/f |
exit · agg–gen-c |
Synthetic generational exit table — projected improvement formula; synthetic, not suitable for production |
|
m/f |
exit · sel–static |
Synthetic select-ultimate exit table, select_period=2; synthetic, not suitable for production |
|
m/f |
exit · sel–gen-a |
Synthetic select-ultimate exit table — constant exponential MI, uniform across select durations, select_period=2, ages 0–100; synthetic, not suitable for production |
|
m/f |
exit · sel–gen-b |
Synthetic select-ultimate exit table — year-indexed MI, uniform across select durations, select_period=2, ages 0–100; synthetic, not suitable for production |
|
m/f |
exit · sel–gen-c |
Synthetic select-ultimate exit table — projected improvement formula, select_period=2, ages 0–100; synthetic, not suitable for production |
|
m/f |
exit · sel–gen-d |
Synthetic select-ultimate exit table — per-duration exponential MI, select_period=2, ages 0–100; synthetic, not suitable for production |
|
u |
exit · agg–static |
Synthetic sex-independent exit table; synthetic, not suitable for production |
See also#
Using Actuarial Tables — how to load these tables into actuarial objects
Table Taxonomy — Table Taxonomy: temporal and structural classification
Mortality Improvement (MI) — how generational improvement factors work
Building Custom Table Files (.ltk) — create custom
.ltkfiles withTableBuilder