Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
43b853f
Enforce stock class authorized share ceiling
HardlyDifficult Jul 8, 2026
f5dbebc
Merge remote-tracking branch 'origin/main' into codex/ocf-stock-class…
HardlyDifficult Jul 8, 2026
76fb636
Update DAR backup for stock class share ceiling
HardlyDifficult Jul 8, 2026
8d13ead
Combine authorized share ceiling enforcement
HardlyDifficult Jul 9, 2026
664cb1d
Tighten authorized share edit validation
HardlyDifficult Jul 9, 2026
c72b8ba
Track authorized share initial edits
HardlyDifficult Jul 9, 2026
c7e67c4
Share authorized ceiling test helpers
HardlyDifficult Jul 9, 2026
ce1af67
Fix authorized ceiling split timing
HardlyDifficult Jul 9, 2026
01f34af
Order same-day share reductions before splits
HardlyDifficult Jul 9, 2026
01aade2
Remove unused authorized share codegen flags
HardlyDifficult Jul 9, 2026
c4e2fb9
Account for stock conversions in share ceilings
HardlyDifficult Jul 9, 2026
1df0ee4
Index stock share events for ceiling validation
HardlyDifficult Jul 9, 2026
790d5ce
Add authorized share same-date tie-break tests
HardlyDifficult Jul 9, 2026
0820f92
Add issuer same-date ceiling tie-break test
HardlyDifficult Jul 9, 2026
22972de
Enforce authorized share ceiling dates
HardlyDifficult Jul 9, 2026
2e6b4ff
Reuse authorized share ceiling validation inputs
HardlyDifficult Jul 9, 2026
e072f63
Validate authorized share edits historically
HardlyDifficult Jul 9, 2026
e0e5f78
Harden authorized share ceiling outputs
HardlyDifficult Jul 9, 2026
a96122b
Handle ambiguous stock conversion outputs
HardlyDifficult Jul 9, 2026
1ef3e9c
Harden authorized share output accounting
HardlyDifficult Jul 9, 2026
b3ca8da
Harden stock conversion ceiling reconstruction
HardlyDifficult Jul 9, 2026
a97c042
Reject unreconstructable warrant exercise outputs
HardlyDifficult Jul 9, 2026
f3df0bc
Group authorized share ceiling enforcement
HardlyDifficult Jul 9, 2026
517e2e2
Enforce stock plan pool edge cases
HardlyDifficult Jul 9, 2026
d8b7b58
Address stock plan ceiling review comments
HardlyDifficult Jul 9, 2026
87adf58
Address stock plan review feedback
HardlyDifficult Jul 9, 2026
5367182
Update share ceiling DAR backup
HardlyDifficult Jul 9, 2026
77f038e
Account for equity comp retractions in plan pools
HardlyDifficult Jul 9, 2026
03c37d1
Tighten plan returns after equity retractions
HardlyDifficult Jul 9, 2026
5d1d05a
Address authorized share ceiling review feedback
HardlyDifficult Jul 9, 2026
e54727e
fix: harden authorized share accounting
HardlyDifficult Jul 10, 2026
1177689
fix: close historical ceiling gaps
HardlyDifficult Jul 10, 2026
c4f98a5
fix: close remaining ceiling review gaps
HardlyDifficult Jul 10, 2026
fad22d4
fix: reject orphaned ceiling references
HardlyDifficult Jul 10, 2026
d72c73d
fix: enforce exact issuance and balance invariants
HardlyDifficult Jul 10, 2026
d63f690
chore: refresh OCP DAR backup
HardlyDifficult Jul 10, 2026
ac8a405
fix: close remaining share ceiling gaps
HardlyDifficult Jul 10, 2026
636c44d
fix: enforce successor quantity continuity
HardlyDifficult Jul 10, 2026
6f6124e
test: cover edited transfer successor continuity
HardlyDifficult Jul 10, 2026
61d8f26
fix: enforce successor lifecycle continuity
HardlyDifficult Jul 10, 2026
a74f716
test: clarify stock issuance optional coverage
HardlyDifficult Jul 10, 2026
77a4965
fix: enforce lifecycle identity and terminal balances
HardlyDifficult Jul 10, 2026
15fe66a
Revert "fix: enforce lifecycle identity and terminal balances"
HardlyDifficult Jul 10, 2026
69491fa
Reapply "fix: enforce lifecycle identity and terminal balances"
HardlyDifficult Jul 10, 2026
22d0e24
chore: remove obsolete codegen metadata
HardlyDifficult Jul 10, 2026
9e4b8a0
Merge lifecycle validation restoration
HardlyDifficult Jul 10, 2026
92d7793
test: make reviewed quantities explicit
HardlyDifficult Jul 10, 2026
ae8a705
fix: reject invalid successor security identities
HardlyDifficult Jul 10, 2026
984fc19
fix: preserve lifecycle accounting across sparse outputs
HardlyDifficult Jul 10, 2026
b9a776e
perf: bound duplicate security validation
HardlyDifficult Jul 10, 2026
9106512
fix: preserve stock plan class continuity
HardlyDifficult Jul 10, 2026
c03cf72
fix: close stock plan attribution gaps
HardlyDifficult Jul 10, 2026
bf668fa
fix: require explicit stock plan continuity
HardlyDifficult Jul 11, 2026
4db6ca5
fix: preserve historical stock plan attribution
HardlyDifficult Jul 11, 2026
1e654b9
fix: enforce inherited stock plan continuity
HardlyDifficult Jul 11, 2026
5629c13
Merge concurrent PR #238 validation work
HardlyDifficult Jul 11, 2026
4d039ea
fix: reconcile stock plan validation history
HardlyDifficult Jul 11, 2026
832cd98
Revert "fix: reconcile stock plan validation history"
HardlyDifficult Jul 11, 2026
4a37f43
test: preserve grouped security identity coverage
HardlyDifficult Jul 11, 2026
0a55da2
fix: validate plan returns and convertible outputs
HardlyDifficult Jul 11, 2026
91021de
fix: close authorized ceiling review gaps
HardlyDifficult Jul 11, 2026
255b237
Merge concurrent PR #238 test coverage
HardlyDifficult Jul 11, 2026
9c68c7c
Merge concurrent PR #238 review fixes
HardlyDifficult Jul 11, 2026
15aab77
fix: reject negative equity exercises
HardlyDifficult Jul 11, 2026
8794299
Enforce global OCF object ID uniqueness
HardlyDifficult Jul 13, 2026
cc20819
Merge remote-tracking branch 'origin/main' into agent/pr238-version-n…
HardlyDifficult Jul 14, 2026
8d7aff9
Scope OCF object ID uniqueness by type
HardlyDifficult Jul 14, 2026
48a4be2
Normalize OpenCapTable DAR candidate
HardlyDifficult Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module Fairmint.OpenCapTable.OCF.StockConsolidation where
-- OCF: https://raw.githubusercontent.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/main/schema/objects/transactions/consolidation/StockConsolidation.schema.json

import Fairmint.OpenCapTable.Types.Core (Context)
import Fairmint.OpenCapTable.Types.Validation (validateNonEmptyStringsArray)
import Fairmint.OpenCapTable.Types.Validation (validateNonEmptyStringsArray, validateUniqueStringsArray)
import Fairmint.Shared.TypeHelpers (validateOptionalText)


Expand Down Expand Up @@ -62,4 +62,5 @@ validateStockConsolidationOcfData d =
-- Arrays element validation (security_ids required per Consolidation base schema)
validateNonEmptyStringsArray d.comments &&
validateNonEmptyStringsArray d.security_ids &&
validateUniqueStringsArray d.security_ids &&
not (null d.security_ids)
14 changes: 14 additions & 0 deletions OpenCapTable-v34/daml/Fairmint/OpenCapTable/Types/Validation.daml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,27 @@ module Fairmint.OpenCapTable.Types.Validation where

import qualified DA.Text as Text
import qualified DA.Crypto.Text as CryptoText
import qualified DA.Set as Set
import Fairmint.Shared.TypeHelpers (validateRequiredText)

-- Shared Text array validator
-- Ensures no element is an empty string; empty arrays are allowed
validateNonEmptyStringsArray : [Text] -> Bool
validateNonEmptyStringsArray xs = all validateRequiredText xs

hasDuplicateTexts : [Text] -> Bool
hasDuplicateTexts = hasDuplicateTextsWith Set.empty

hasDuplicateTextsWith : Set.Set Text -> [Text] -> Bool
hasDuplicateTextsWith seen remaining = case remaining of
[] -> False
text :: rest ->
text `Set.member` seen || hasDuplicateTextsWith (Set.insert text seen) rest

-- Ensures no element appears more than once; empty arrays are allowed
validateUniqueStringsArray : [Text] -> Bool
validateUniqueStringsArray xs = not (hasDuplicateTexts xs)

-- Country code
-- OCF: https://raw.githubusercontent.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/main/schema/types/CountryCode.schema.json
validCountryCodes : [Text]
Expand Down
19 changes: 2 additions & 17 deletions Test/daml/OpenCapTable/Setup.daml
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
module OpenCapTable.Setup where

import Fairmint.OpenCapTable.OCF.Issuer
import Fairmint.OpenCapTable.CapTable
import Fairmint.OpenCapTable.IssuerAuthorization
import Fairmint.OpenCapTable.Types.Core (Context(..))
import Fairmint.OpenCapTable.Types.Stock (OcfInitialSharesAuthorized(..))
import OpenCapTable.TestHelpers (defaultIssuerWithAuthorizedShares)
import Daml.Script
import DA.Date
import DA.Time

data TestUsers = TestUsers{ tu_system_operator: Party, tu_issuer: Party, tu_alice: Party, tu_bob: Party, tu_charlie: Party, tu_rando: Party }

Expand Down Expand Up @@ -42,20 +40,7 @@ setupTestOcp = script do

capTableCid <- submit issuer do
exerciseCmd authCid CreateCapTable with
issuer_data = IssuerOcfData with
id = "ISSUER_1"
legal_name = "TestIssuer Inc."
formation_date = time (DA.Date.date 2020 Jan 15) 12 0 0
country_of_formation = "US"
dba = None
country_subdivision_of_formation = None
country_subdivision_name_of_formation = None
tax_ids = []
email = None
phone = None
address = None
initial_shares_authorized = Some (OcfInitialSharesNumeric 1000.0)
comments = []
issuer_data = defaultIssuerWithAuthorizedShares "ISSUER_1" (Some (OcfInitialSharesNumeric 100_000_000.0))

return TestOcp
{ system_operator = system_operator
Expand Down
115 changes: 74 additions & 41 deletions Test/daml/OpenCapTable/TestConvertibleConversion.daml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Fairmint.OpenCapTable.Types.Monetary (OcfMonetary(..))
import Fairmint.OpenCapTable.Types.Conversion (OcfConversionTriggerType(..), OcfConvertibleConversionRight(..), OcfConvertibleConversionMechanism(..), OcfSAFEConversionMechanism(..), OcfConvertibleType(..), OcfCapitalizationDefinition(..))
import qualified Fairmint.OpenCapTable.CapTable as CT
import OpenCapTable.Setup
import OpenCapTable.TestHelpers (addDefaultStakeholder)
import OpenCapTable.TestHelpers (defaultStockIssuance, setupForStockIssuance)
import qualified DA.Date as DA
import DA.Date (Month(..))
import qualified DA.Time as DT
Expand Down Expand Up @@ -59,72 +59,105 @@ createConvertibleIssuance issuer capTableCid securityId amount =
-- Based on prod: SAFE conversion to Series Seed-2 Preferred
testConvertibleConversion_SAFEConversion = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
capTableCid <- addDefaultStakeholder issuer cap_table
(capTableCid, stockClassId, stakeholderId) <- setupForStockIssuance issuer cap_table
let securityId = "7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e"
let resultSecurityId = "5f4a6b7c-9d0e-2f3a-6b7c-8d9e0f1a2b3c"
let conversionDate = DT.time (DA.date 2025 Nov 10) 0 0 0
result <- createConvertibleIssuance issuer capTableCid securityId 100000.0
_ <- submit issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "25d377f8-a8de-4d8d-853c-2d75927e7927"
date = DT.time (DA.date 2025 Nov 10) 0 0 0
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Automatic conversion upon Series Seed-2 equity financing"
resulting_security_ids = ["5f4a6b7c-9d0e-2f3a-6b7c-8d9e0f1a2b3c"]
comments = ["SAFE conversion to Series Seed-2 Preferred for Investor A"]
balance_security_id = None
capitalization_definition = None
quantity_converted = None]
creates =
[ CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "25d377f8-a8de-4d8d-853c-2d75927e7927"
date = conversionDate
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Automatic conversion upon Series Seed-2 equity financing"
resulting_security_ids = [resultSecurityId]
comments = ["SAFE conversion to Series Seed-2 Preferred for Investor A"]
balance_security_id = None
capitalization_definition = None
quantity_converted = None
, CT.OcfCreateStockIssuance ((defaultStockIssuance
"TX_CONV_RESULT_1"
resultSecurityId
stakeholderId
stockClassId) with
date = conversionDate
quantity = 100.0)
]
edits = []
deletes = []
pure ()

-- Test 2: Convertible conversion with capitalization definition
testConvertibleConversion_WithCapDefinition = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
capTableCid <- addDefaultStakeholder issuer cap_table
(capTableCid, stockClassId, stakeholderId) <- setupForStockIssuance issuer cap_table
let securityId = "CONV-SEC-002"
let resultSecurityId = "SSEC-PREFERRED-001"
let conversionDate = DT.time (DA.date 2025 Dec 01) 0 0 0
result <- createConvertibleIssuance issuer capTableCid securityId 250000.0
_ <- submit issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "TX_CONV_CONVERSION_2"
date = DT.time (DA.date 2025 Dec 01) 0 0 0
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Conversion based on fully diluted capitalization at $16M valuation cap"
resulting_security_ids = ["SSEC-PREFERRED-001"]
comments = ["Conversion of $250,000 SAFE at $16M post-money valuation cap"]
balance_security_id = None
capitalization_definition = Some (OcfCapitalizationDefinition with
exclude_security_ids = []
include_security_ids = []
include_stock_class_ids = ["COMMON", "PREFERRED"]
include_stock_plans_ids = ["ESOP-2024"])
quantity_converted = Some 15625.0] -- $250K / $16 per share
creates =
[ CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "TX_CONV_CONVERSION_2"
date = conversionDate
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Conversion based on fully diluted capitalization at $16M valuation cap"
resulting_security_ids = [resultSecurityId]
comments = ["Conversion of $250,000 SAFE at $16M post-money valuation cap"]
balance_security_id = None
capitalization_definition = Some (OcfCapitalizationDefinition with
exclude_security_ids = []
include_security_ids = []
include_stock_class_ids = ["COMMON", "PREFERRED"]
include_stock_plans_ids = ["ESOP-2024"])
quantity_converted = Some 15625.0
, CT.OcfCreateStockIssuance ((defaultStockIssuance
"TX_CONV_RESULT_2"
resultSecurityId
stakeholderId
stockClassId) with
date = conversionDate
quantity = 15625.0)
]
edits = []
deletes = []
pure ()

-- Test 3: Partial conversion with balance security
testConvertibleConversion_PartialConversion = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
capTableCid <- addDefaultStakeholder issuer cap_table
(capTableCid, stockClassId, stakeholderId) <- setupForStockIssuance issuer cap_table
let securityId = "CONV-SEC-003"
let resultSecurityId = "SSEC-PREFERRED-002"
let conversionDate = DT.time (DA.date 2025 Nov 15) 0 0 0
result <- createConvertibleIssuance issuer capTableCid securityId 500000.0
_ <- submit issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "TX_CONV_CONVERSION_3"
date = DT.time (DA.date 2025 Nov 15) 0 0 0
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Partial conversion - investor electing to convert $300,000 of $500,000 SAFE"
resulting_security_ids = ["SSEC-PREFERRED-002"]
comments = []
balance_security_id = Some "CONV-SEC-003-REMAINDER"
capitalization_definition = None
quantity_converted = Some 300000.0]
creates =
[ CT.OcfCreateConvertibleConversion ConvertibleConversionOcfData with
id = "TX_CONV_CONVERSION_3"
date = conversionDate
security_id = securityId
trigger_id = "equity-financing-trigger"
reason_text = "Partial conversion - investor electing to convert $300,000 of $500,000 SAFE"
resulting_security_ids = [resultSecurityId]
comments = []
balance_security_id = Some "CONV-SEC-003-REMAINDER"
capitalization_definition = None
quantity_converted = Some 300000.0
, CT.OcfCreateStockIssuance ((defaultStockIssuance
"TX_CONV_RESULT_3"
resultSecurityId
stakeholderId
stockClassId) with
date = conversionDate
quantity = 300000.0)
]
edits = []
deletes = []
pure ()
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ createEquityCompensationIssuance issuer capTableCid =
stockholder_approval_date = None
consideration_text = Some "Services rendered"
security_law_exemptions = []
stock_plan_id = Some "SP_2024"
stock_plan_id = None
stock_class_id = Some "SC_COMMON"
compensation_type = OcfCompensationTypeOptionISO
quantity = 10000.0
Expand Down
44 changes: 35 additions & 9 deletions Test/daml/OpenCapTable/TestEquityCompensationCancellation.daml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ createEquityCompensationIssuance issuer capTableCid securityId quantity =
stockholder_approval_date = None
consideration_text = None
security_law_exemptions = []
stock_plan_id = Some "PLAN-2020"
stock_plan_id = None
stock_class_id = Some "COMMON"
compensation_type = OcfCompensationTypeOptionNSO
quantity = quantity
Expand Down Expand Up @@ -90,17 +90,43 @@ testEquityCompensationCancellation_PartialWithOptionals = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
capTableCid <- addDefaultStakeholder issuer cap_table
let securityId = "SEC-EC-PARTIAL"
let balanceSecurityId = "SEC-EC-PARTIAL-BAL"
let cancellationDate = DT.time (DA.date 2024 Jun 30) 0 0 0
result <- createEquityCompensationIssuance issuer capTableCid securityId 500000.0
_ <- submit issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateEquityCompensationCancellation EquityCompensationCancellationOcfData with
id = "TX_EC_CANCEL_PARTIAL"
date = DT.time (DA.date 2024 Jun 30) 0 0 0
security_id = securityId
quantity = 150000.0
reason_text = "Partial forfeiture due to early departure"
balance_security_id = Some "SEC-EC-PARTIAL-BAL"
comments = ["Partial cancellation per separation agreement", "Remaining vested options: 350,000"]]
creates =
[ CT.OcfCreateEquityCompensationCancellation EquityCompensationCancellationOcfData with
id = "TX_EC_CANCEL_PARTIAL"
date = cancellationDate
security_id = securityId
quantity = 150000.0
reason_text = "Partial forfeiture due to early departure"
balance_security_id = Some balanceSecurityId
comments = ["Partial cancellation per separation agreement", "Remaining vested options: 350,000"]
, CT.OcfCreateEquityCompensationIssuance EquityCompensationIssuanceOcfData with
id = "TX_EC_CANCEL_PARTIAL_BALANCE"
date = cancellationDate
security_id = balanceSecurityId
custom_id = "GRANT-001-BALANCE"
stakeholder_id = "SH-1"
board_approval_date = None
stockholder_approval_date = None
consideration_text = None
security_law_exemptions = []
stock_plan_id = None
stock_class_id = Some "COMMON"
compensation_type = OcfCompensationTypeOptionNSO
quantity = 350000.0
exercise_price = Some (OcfMonetary with amount = 0.10, currency = "USD")
base_price = None
early_exercisable = Some False
vesting_terms_id = None
vestings = []
expiration_date = None
termination_exercise_windows = []
comments = []
]
edits = []
deletes = []
pure ()
8 changes: 4 additions & 4 deletions Test/daml/OpenCapTable/TestEquityCompensationExercise.daml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module OpenCapTable.TestEquityCompensationExercise where
import Fairmint.OpenCapTable.OCF.EquityCompensationExercise
import qualified Fairmint.OpenCapTable.CapTable as CT
import OpenCapTable.Setup
import OpenCapTable.TestHelpers (addDefaultStakeholder, addEquityCompensationIssuance)
import OpenCapTable.TestHelpers (addPrerequisites, addEquityCompensationIssuance)
import qualified DA.Date as DA
import DA.Date (Month(..))
import qualified DA.Time as DT
Expand All @@ -11,7 +11,7 @@ import Daml.Script
testCreateAndArchiveEquityCompensationExercise = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
-- Add stakeholder and equity compensation issuance before exercising
cap_table <- addDefaultStakeholder issuer cap_table
cap_table <- addPrerequisites issuer cap_table
cap_table <- addEquityCompensationIssuance issuer cap_table "EC-ISS-1" "EC-1" "SH-1"
_ <- submit issuer do
exerciseCmd cap_table CT.UpdateCapTable with
Expand All @@ -30,7 +30,7 @@ testCreateAndArchiveEquityCompensationExercise = script do
testCreateAndArchiveEquityCompensationExerciseBuiltIn = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
-- Add stakeholder and equity compensation issuance before exercising
cap_table <- addDefaultStakeholder issuer cap_table
cap_table <- addPrerequisites issuer cap_table
cap_table <- addEquityCompensationIssuance issuer cap_table "EC-ISS-1" "EC-1" "SH-1"
_ <- submit issuer do
exerciseCmd cap_table CT.UpdateCapTable with
Expand All @@ -50,7 +50,7 @@ testCreateAndArchiveEquityCompensationExerciseBuiltIn = script do
testEquityCompensationExercise_OptionalsSome = script do
TestOcp{system_operator, issuer, ctx, cap_table} <- setupTestOcp
-- Add stakeholder and equity compensation issuance before exercising
cap_table <- addDefaultStakeholder issuer cap_table
cap_table <- addPrerequisites issuer cap_table
cap_table <- addEquityCompensationIssuance issuer cap_table "EC-ISS-2" "EC-2" "SH-1"
_ <- submit issuer do
exerciseCmd cap_table CT.UpdateCapTable with
Expand Down
2 changes: 1 addition & 1 deletion Test/daml/OpenCapTable/TestEquityCompensationIssuance.daml
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ testEquityCompensationIssuance_OptionalsSome = script do
exercise_price = Some (OcfMonetary with amount = 2.5, currency = "USD")
expiration_date = Some (DT.time (DA.date 2034 Feb 01) 0 0 0)
stock_class_id = Some "SC-1"
stock_plan_id = Some "PLAN-1"
stock_plan_id = None
stockholder_approval_date = Some (DT.time (DA.date 2024 Jan 20) 0 0 0)
vesting_terms_id = Some "VT-1"
security_law_exemptions = [OcfSecurityExemption with description = "ISO", jurisdiction = "US"]
Expand Down
Loading
Loading