Holdings Library

Debt and equity ownership library for financial structures: cap table representation, vesting, conversion (notes/SAFEs), liquidation preferences, and valuation. Inspired by the ACTUS Financial Research Foundation. Import with IMPORT holdings (also imports prelude, daydate, currency, and legal-persons).

Status: Prototype (version 1.0.0). API may change.

Location

jl4-core/libraries/holdings.l4

Constants

Security and debt type codes (all STRING):

Constant Values
Common Stock, Preferred Stock, Convertible Note, SAFE, Warrant, Stock Option, RSU "COMMON_STOCK", "PREFERRED_STOCK", "CONVERTIBLE_NOTE", "SAFE", "WARRANT", "STOCK_OPTION", "RSU"
Senior Debt, Subordinated Debt, Convertible Debt, Bridge Loan "SENIOR_DEBT", "SUBORDINATED_DEBT", "CONVERTIBLE_DEBT", "BRIDGE_LOAN"

Ownership Calculations

Function Signature Description
ownership percentage sharesOwned totalShares NUMBER → NUMBER → NUMBER Percentage owned (0 when totalShares is 0)
is dilutive securityType STRING → BOOLEAN TRUE for convertibles, SAFEs, warrants, and stock options

Preference Calculations

Function Signature Description
liquidation preference investmentAmount preferenceMultiple NUMBER → NUMBER → NUMBER Preference amount = investment × multiple
preferred payout isParticipating liquidationValue preferenceAmount ownershipPct BOOLEAN → NUMBER → NUMBER → NUMBER → NUMBER Participating: preference + pro-rata; otherwise max(preference, pro-rata)

Vesting Calculations

Function Signature Description
vested shares totalShares vestingStartDate cliffMonths vestingMonths currentDate NUMBER → DATE → NUMBER → NUMBER → DATE → NUMBER Linear monthly vesting: 0 before cliff, all after full vesting period
approximate months since startDate endDate DATE → DATE → NUMBER Calendar-month difference (year/month fields only)

Conversion Calculations

Function Signature Description
shares from convertible principalAmount interestRate issueDate conversionDate conversionPrice discountPct NUMBER → NUMBER → DATE → DATE → NUMBER → NUMBER → NUMBER Shares from a convertible note: principal + simple interest at discounted price
shares from SAFE investmentAmount valuationCap discountPct pricePerShare NUMBER → NUMBER → NUMBER → NUMBER → NUMBER Shares from a SAFE: lower of cap price and discounted price

Debt Service Calculations

Function Signature Description
accrued interest principalAmount annualRate issueDate currentDate NUMBER → NUMBER → DATE → DATE → NUMBER Simple interest over elapsed days (365-day year)
debt service coverage operatingIncome debtPayment NUMBER → NUMBER → NUMBER DSCR = income / payment (0 when payment is 0)

Cap Table Aggregations

Function Signature Description
total shares sharesList LIST OF NUMBER → NUMBER Sum of share counts
fully diluted shares commonShares preferredShares optionPoolShares convertibleShares NUMBER → NUMBER → NUMBER → NUMBER → NUMBER Sum of all share classes

Valuation Calculations

Function Signature Description
post-money valuation pricePerShare fullyDilutedShares NUMBER → NUMBER → NUMBER Price × fully diluted shares
pre-money valuation postMoneyValuation investmentAmount NUMBER → NUMBER → NUMBER Post-money minus investment

Temporal Tracking Helpers

Function Signature Description
is active at issuanceDate maturityDate checkDate DATE → DATE → DATE → BOOLEAN Check date within [issuance, maturity] (inclusive)
has matured maturityDate checkDate DATE → DATE → BOOLEAN Check date strictly after maturity

See holdings.l4 source for all functions.