Last Payment Adjustment#
When the product \(n \cdot m\) of a term and payment frequency is not an integer, the final sub-annual period is incomplete. Lactuca applies a proportional weight to that last period so that the present value reflects the true contracted term \(n\) — not the nearest aligned grid point.
Note
This adjustment applies only to discrete_precision mode for the standard
payments_frac scaling on the full payment grid. In discrete_simplified
with fractional n_eff and m > 1, the terminal fraction s = n_eff - k
is valued on an exact m-thly tail (discrete_precision conventions) rather
than via Woolhouse on the annual grid. Continuous modes do not implement
fractional final-period scaling on the simplified path.
Annuity-due versus annuity-immediate#
Lactuca exposes separate methods for each payment convention:
Method family |
Convention |
Symbol |
Fractional adjustment |
|---|---|---|---|
|
Annuity-due — payments at the start of each sub-period |
\(\ddot{a}^{(m)}\) |
None — last payment is at \(\lfloor nm \rfloor / m \le n\) with full weight |
|
Annuity-immediate — payments at the end of each sub-period |
\(a^{(m)}\) |
Last payment scaled by \(w\) when \(w > 0\) |
For annuity-due methods (äx, äxy, äxyz, äjoint), the last payment is at
\(\lfloor nm \rfloor / m \le n\) and is included with full weight — no scaling. The next
payment would fall at \((\lfloor nm \rfloor + 1)/m > n\) and is simply excluded.
For annuity-immediate methods (ax, axy, axyz, ajoint), the final period ends at
\((\lfloor nm \rfloor + 1)/m > n\), so the last payment is pulled back to \(n\) and
proportionally reduced by \(w\).
The fractional weight#
The core quantity is the fractional part of \(n \cdot m\):
When \(w = 0\) the term is exactly aligned with the payment grid and no adjustment is needed. When \(w > 0\) the final period is incomplete and \(w\) is used as the scaling weight.
Note
When a time shift ts > 0 and deferment d are used together, \(w\) is computed from the
effective term \(n_\text{eff} = \max\!\bigl(n - \max(ts - d,\, 0),\, 0\bigr)\) rather than from raw \(n\).
When \(ts \le d\) the shift falls entirely within the deferment period and \(n_\text{eff} = n\).
Example 1 — aligned (\(n = 10.75\), \(m = 4\), quarterly):
No fractional adjustment is applied.
Example 2 — incomplete (\(n = 10.6\), \(m = 4\), quarterly):
The last quarter covers only \(w/m = 0.1\) year out of a full sub-period of \(1/m = 0.25\) years.
Annuity adjustment#
For ax, axy, axyz, ajoint (annuity-immediate) with \(w > 0\):
The last payment time is the exact term endpoint \(n_\text{eff} + d_\text{eff}\), where \(d_\text{eff}=\max(d-ts,\,0)\) is the effective deferment after the time shift (for \(ts=0\) or when the shift falls inside the deferment period, this reduces to \(n_\text{eff}+d\)).
The last payment amount is scaled by \(w\):
where \(g(\cdot)\) is the growth factor, \({}_{n_\text{eff}}p_x\) is the survival probability
from the shifted age to \(n_\text{eff}\) (for multi-life methods axy, axyz, ajoint,
this is the joint survival probability of all lives), and \(d_\text{eff}=\max(d-ts,\,0)\);
see Prospective Reserves and the ts Parameter.
This is exposed in the payment_adjustment array returned by return_flows=True
(see Inspecting Cash Flows): all elements are 1.0 except the last, which equals \(w\).
For äx, äxy, äxyz, äjoint (annuity-due), \(w\) does not produce a scaled final payment:
the last payment was already made at \(\lfloor nm \rfloor / m\) with full weight.
Insurance adjustment#
For all insurance methods — Ax, Axy, Axyz, Afirst, and their term and deferred
variants — the fractional-period scaling applies whenever \(w > 0\). Insurances have no
due/immediate distinction (that concept is replaced by mortality_placement), so the
adjustment fires regardless of any annuity-related convention:
The last period’s death probability is scaled by \(w\):
The last period’s discount time offset is also scaled:
where \(\delta_m\) is the mortality_placement offset (\(0\), \(1/(2m)\), or \(1/m\)).
Both effects are visible in the return_flows=True dict via the
death_probability_adjustment and discount_time arrays — see Inspecting Cash Flows.
Irregular cashflows#
When using cashflow_times and cashflow_amounts instead of the n/m grid, the
fractional adjustment is not applied — the programmer controls each payment’s timing
and amount directly. See Irregular Cashflows for details.
Note
Annuity-due methods (äx, äxy, äxyz, äjoint) do not accept
cashflow_times — they always use the standard n/m grid. For irregular
schedules with multiple lives use the immediate counterparts (ax, axy, axyz,
ajoint) with explicit cashflow_times / cashflow_amounts.
See also#
Inspecting Cash Flows —
payment_adjustmentanddeath_probability_adjustmentarraysCalculation Modes —
discrete_precisionappliespayments_fracscaling on the uniform grid;discrete_simplifiedvalues fractionaln_effvia an exact m-thly tail (not Woolhouse on the last period)Irregular Cashflows — arbitrary cashflow timing
Configuration —
force_integer_tsand other calculation settingsNotation and Glossary — \(\ddot{a}\), \(a\), \(m\), \(n\) symbol definitions