Skip to content

Commit

Permalink
feat: Update stock plan to support multiple stock class ids
Browse files Browse the repository at this point in the history
- Stock plan supports stock_class_ids and marks stock_class_id as deprecated
- Remove oneOf validation in EquityCompensationIssuance for stock_plan_id and stock_class_id
  • Loading branch information
lavens committed Mar 26, 2024
1 parent 7abfda1 commit 450ef8b
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 28 deletions.
7 changes: 5 additions & 2 deletions docs/schema_markdown/schema/objects/StockPlan.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion samples/StockPlans.ocf.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"board_approval_date": "1983-12-31",
"initial_shares_reserved": "+10000000.00",
"default_cancellation_behavior": "RETURN_TO_POOL",
"stock_class_id": "8d8371e8-d41d-4a49-9f42-b91758fd155d",
"stock_class_ids": ["8d8371e8-d41d-4a49-9f42-b91758fd155d"],
"comments": [
"Using new form of SOP released by Firm Y's benefits & comp team on 10/10/2021."
]
Expand Down
30 changes: 27 additions & 3 deletions schema/objects/StockPlan.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,37 @@
"$ref": "https://raw.githubusercontent.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/main/schema/enums/StockPlanCancellationBehaviorType.schema.json"
},
"stock_class_id": {
"description": "Identifier of the StockClass object this plan is composed of",
"type": "string"
"description": "[DEPRECATED in favor of stock_class_ids] Identifier of the StockClass object this plan is composed of.",
"type": "string",
"deprecated": "true"
},
"stock_class_ids": {
"description": "Identifiers of StockClass objects this plan is composed of",
"type": "array",
"items": {
"type": "string"
}
},
"id": {},
"comments": {}
},
"oneOf": [
{
"required": ["stock_class_id"],
"not": {
"required": ["stock_class_ids"]
},
"$comment": "Due to how the JSONSchema 'not' works, this means that, if stock_class_id is present, stock_class_ids cannot be present"
},
{
"required": ["stock_class_ids"],
"not": {
"required": ["stock_class_id"]
},
"$comment": "Due to how the JSONSchema 'not' works, this means that, if stock_class_ids is present, stock_class_id cannot be present"
}
],
"additionalProperties": false,
"required": ["plan_name", "stock_class_id", "initial_shares_reserved"],
"required": ["plan_name", "initial_shares_reserved"],
"$comment": "Copyright © 2024 Open Cap Table Coalition (https://opencaptablecoalition.com) / Original File: https://github.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/tree/main/schema/objects/StockPlan.schema.json"
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,11 @@
},
"stock_plan_id": {
"description": "If the equity compensation was issued from a plan (don't forget, plan-less options are a thing), what is the plan id.",
"type": "string",
"$comment": "If this is provided, stock_class_id cannot be set due to the oneOf below"
"type": "string"
},
"stock_class_id": {
"description": "If the equity compensation was NOT issued from a plan (don't forget, plan-less options are a thing), we need to know what underlying stock class it converts to.",
"type": "string",
"$comment": "If this is provided, stock_plan_id cannot be set due to the oneOf below"
"description": "The stock class options will exercise into. Especially important for plan-less options and any issuances from a plan that supports multiple share classes.",
"type": "string"
},
"compensation_type": {
"description": "If the plan security is compensation, what kind?",
Expand Down Expand Up @@ -148,22 +146,6 @@
"required": ["base_price"]
}
],
"oneOf": [
{
"required": ["stock_class_id"],
"not": {
"required": ["stock_plan_id"]
},
"$comment": "Due to how the JSONSchema 'not' works, this means that, if stock_class_id is present, stock_plan_id cannot be present"
},
{
"required": ["stock_plan_id"],
"not": {
"required": ["stock_class_id"]
},
"$comment": "Due to how the JSONSchema 'not' works, this means that, if stock_plan_id is present, stock_class_id cannot be present"
}
],
"additionalProperties": false,
"required": [
"compensation_type",
Expand Down

0 comments on commit 450ef8b

Please sign in to comment.