fintech-algorithms

If-Converted Convertible-Preference Dilution

Install and import

bash
npm install fintech-algorithms
ts
import { calculateConvertiblePreferenceDilution } from "fintech-algorithms/earnings-and-per-share-analytics/basic-and-diluted-eps/if-converted-convertible-preference-dilution";

Signature

calculateConvertiblePreferenceDilution(input)

Worked example

executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

Input

input
{
  "entity_id": "EXAMPLE-PLC",
  "instrument_id": "SERIES-A-CPS",
  "period_start": "2025-01-01",
  "period_end": "2025-12-31",
  "as_of": "2026-02-20T16:30:00Z",
  "accounting_framework": "IFRS",
  "currency": "USD",
  "basic_control_numerator": "90",
  "basic_weighted_average_shares": "30",
  "earnings_scale": "1000000",
  "share_scale": "1000000",
  "preferred_dividend_adjustment_deducted_from_basic": "6",
  "other_pre_tax_income_adjustment_if_converted": "0",
  "income_tax_effect_of_other_adjustment_if_converted": "0"
}

Showing 14 of 45 fields.

Call

calculateConvertiblePreferenceDilution(input)

Returns

object with 37 fields: metric, entity_id, instrument_id, period_start, period_end, accounting_framework, loss_control_rule, currency, …

{
  "metric": "if_converted_convertible_preference_dilution",
  "entity_id": "EXAMPLE-PLC",
  "instrument_id": "SERIES-A-CPS",
  "period_start": "2025-01-01",
  "period_end": "2025-12-31",
  "accounting_framework": "IFRS",
  "loss_control_rule": "candidate_comparison",
  "currency": "USD",
  "basic_control_numerator_base": "90000000",
  "basic_weighted_average_shares_base": "30000000",
  "preferred_dividend_addback_base": "6000000",
  "other_pre_tax_income_adjustment_base": "0",
  "income_tax_effect_of_other_adjustment_base": "0",
  "net_numerator_adjustment_base": "6000000"
}

Showing 14 of 37 fields.

Diagrams

If-Converted Convertible-Preference Dilution — preference conversion bridge

Calculation flow

If-converted preference decision flow
flowchart TD
    A["Receive one preferred series and Basic continuing-operations control"] --> B{"Basic, dividend, share basis, and terms complete?"}
    B -->|No| R["Reject incomplete contract"]
    B -->|Yes| P{"Participating, partial, contingent-unresolved, or variable terms?"}
    P -->|Participating| T["Route to D46-F02-A05 two-class resolution"]
    P -->|Unresolved| U["Resolve framework, contingency, tranche, and holder-advantageous terms"]
    P -->|No| S["Exposure start = later of period start and issue date"]
    S --> E["Exposure end (exclusive) = earliest of period end + 1, conversion, or lapse"]
    E --> W["ΔD = fixed conversion shares × exposure days / period days"]
    W --> N["ΔN = Basic-basis dividend + other pre-tax effect + explicit tax effect"]
    N --> C["Candidate = (Basic numerator + ΔN) / (Basic shares + ΔD)"]
    C --> L{"Declared rule excludes all shares for a control loss?"}
    L -->|Yes| X["Framework loss-control exclusion"]
    L -->|No| D{"Exact candidate < exact Basic EPS?"}
    D -->|Yes| I["Dilutive: include in standalone candidate"]
    D -->|No or equal| X["Antidilutive: exclude"]

How it works

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References

  • IAS 33 Earnings per Share
  • FASB Statement No. 128, Earnings per Share
  • ASU 2020-06, Debt—Debt with Conversion and Other Options and Derivatives and Hedging
  • Celsius Holdings, Inc. 2026 first-quarter EPS note
  • Research reconciliation