Rights-Issue TERP Adjustment
Install and import
npm install fintech-algorithmsimport { calculate } from "fintech-algorithms/corporate-actions-and-security-master-data/complex-distributions/rights-issue-terp-adjustment";Signature
calculate(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
{
"asOf": "2024-05-24T00:00:00Z",
"revisions": [
{
"eventId": "NG-2024-RIGHTS",
"revisionId": "NG-PROSPECTUS-2024-05-23",
"revisionSequence": 1,
"availableAt": "2024-05-23T23:59:59Z",
"status": "confirmed",
"recordAt": "2024-05-20T18:00:00+01:00",
"exAt": "2024-05-24T08:00:00+01:00",
"rightsTradingStartAt": "2024-05-24T08:00:00+01:00",
"paymentDeadlineAt": "2024-06-10T11:00:00+01:00",
"newSharesTradeAt": "2024-06-12T08:00:00+01:00",
"terms": {
"oldShares": 24,
"newShares": 7,
"rawCumRightsPrice": 1127.5,
"cashDisadvantage": 39.12,
"quoteCurrency": "GBp",
"subscriptionPrice": 645,
"subscriptionCurrency": "GBp",
"fxQuotePerSubscription": 1,
"feesPerNewShareQuote": 0,
"taxesPerNewShareQuote": 0,
"holdingOldShares": 100,
"outOfMoneyPolicy": "reject",
"priceSourceId": "NG-PROSPECTUS-P52-LSE-DOL-QUOTE",
"priceDate": "2024-05-22"
}
}
]
}Call
calculate(input)Returns
object with 15 fields: eventId, revisionId, availableAt, quoteCurrency, referencePrice, subscriptionCashQuote, terp, valuePerOldShare, …
{
"eventId": "NG-2024-RIGHTS",
"revisionId": "NG-PROSPECTUS-2024-05-23",
"availableAt": "2024-05-23T23:59:59Z",
"quoteCurrency": "GBp",
"referencePrice": 1088.38,
"subscriptionCashQuote": 645,
"terp": 988.261935,
"valuePerOldShare": 100.118065,
"valuePerNewShareRight": 343.261935,
"adjustmentFactor": 0.908012,
"issueDiscountToTerp": 0.347339,
"inTheMoney": true,
"applied": true,
"entitlement": {
"exactNewShares": 29.166667,
"wholeNewShares": 29,
"fractionalNewShare": 0.166667
}
}Showing 14 of 15 fields.
Diagrams
Calculation flow
TERP evidence and calculation flow
flowchart LR
A["Event revisions"] --> B["Select latest available at asOf"]
B --> C{"Confirmed and timed correctly?"}
C -->|No| X["Reject with diagnostic"]
C -->|Yes| D["Normalize price, currency, FX, fees, taxes"]
D --> E{"Subscription cash below reference?"}
E -->|Yes| F["Derive TERP and two rights values"]
E -->|No| G["Reject or explicit no adjustment"]
F --> H["Emit revision and units"]
G --> H
H --> I["Keep observed ex-rights trade separate"]
Rights-issue operational lifecycle
stateDiagram-v2
[*] --> RecordSnapshot: 20 May 18:00 London
RecordSnapshot --> TermsAvailable: prospectus published 23 May
TermsAvailable --> ExRights: 24 May 08:00
ExRights --> NilPaid: nil-paid dealings begin
NilPaid --> Accepted: pay and accept by 10 June 11:00
NilPaid --> RenouncedOrLapsed: transfer or do not accept
Accepted --> FullyPaidShares: dealings begin 12 June 08:00
RenouncedOrLapsed --> AllocatedByTerms: proceeds depend on offer rules
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
- R1 - National Grid plc Rights Issue Prospectus
- R2 - National Grid 7-for-24 Rights Issue announcement
- R3 - National Grid Rights Issue and Prospectus hub
- R4 - S&P DJI Equity Indices Policies & Practices
- R5 - FTSE Russell Corporate Actions and Events Guide
- R6 - RFC 3339: Date and Time on the Internet
- Evidence decision