If-Converted Convertible-Preference Dilution
Install and import
npm install fintech-algorithmsimport { 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
{
"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
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.
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