diff --git a/docs/schema_markdown/schema/objects/StockPlan.md b/docs/schema_markdown/schema/objects/StockPlan.md index 8f3c2ca85..b3e6f1a9d 100644 --- a/docs/schema_markdown/schema/objects/StockPlan.md +++ b/docs/schema_markdown/schema/objects/StockPlan.md @@ -22,7 +22,8 @@ | stockholder_approval_date | [schema/types/Date](../types/Date.md) | This optional field tracks when the stockholders approved this stock plan. This is intended for use by US companies that want to issue Incentive Stock Options (ISOs), as the issuing StockPlan must receive shareholder approval within a specified time frame in order to issue valid ISOs. | - | | initial_shares_reserved | [schema/types/Numeric](../types/Numeric.md) | The initial number of shares reserved in the pool for this stock plan by the Board or equivalent body. | `REQUIRED` | | default_cancellation_behavior | `Enum - Stock Plan Cancellation Behavior Type`

_Description:_ For a given stock plan, what is the default rule for what happens to the shares reserved for a Plan Security after it's cancelled.

**ONE OF:**
• RETIRE
• RETURN_TO_POOL
• HOLD_AS_CAPITAL_STOCK
• DEFINED_PER_PLAN_SECURITY | If a security issued under this Stock Plan is cancelled, what happens to the reserved shares by default? NOTE: for any given security issued from the pool, the Plan's default cancellation behavior can be overridden by subsequent transactions cancelling the reserved stock, returning it to pool or marking it as capital stock. The event chain should always control - do not rely on this field and fail to traverse the events. | - | -| stock_class_id | `STRING` | Identifier of the StockClass object this plan is composed of | `REQUIRED` | +| stock_class_id | `STRING` | [DEPRECATED in favor of stock_class_ids] Identifier of the StockClass object this plan is composed of. | - | +| stock_class_ids | [`STRING`] | Identifiers of StockClass objects this plan is composed of | - | **Source Code:** [schema/objects/StockPlan](../../../../schema/objects/StockPlan.schema.json) @@ -37,7 +38,9 @@ "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." ] diff --git a/docs/schema_markdown/schema/objects/transactions/issuance/EquityCompensationIssuance.md b/docs/schema_markdown/schema/objects/transactions/issuance/EquityCompensationIssuance.md index 8450f67a1..3d20a5edc 100644 --- a/docs/schema_markdown/schema/objects/transactions/issuance/EquityCompensationIssuance.md +++ b/docs/schema_markdown/schema/objects/transactions/issuance/EquityCompensationIssuance.md @@ -29,7 +29,7 @@ | consideration_text | `STRING` | Unstructured text description of consideration provided in exchange for security issuance | - | | security_law_exemptions | [ [schema/types/SecurityExemption](../../../types/SecurityExemption.md) ] | List of security law exemptions (and applicable jurisdictions) for this security | `REQUIRED` | | stock_plan_id | `STRING` | If the equity compensation was issued from a plan (don't forget, plan-less options are a thing), what is the plan id. | - | -| stock_class_id | `STRING` | 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. | - | +| stock_class_id | `STRING` | The stock class options will exercise into. Especially important for plan-less options and any issuances from a plan that supports multiple share classes. | - | | compensation_type | `Enum - Compensation Type`

_Description:_ Enumeration of equity compensation types (there are some things around the margins like RSAs that don't currently fit under the EquityCompensation umbrella but might arguably fall under this. If you want to create an RSA, create a stock issuance with vesting - you can link it to a plan as well, if you want).

**The enums stand for:**
1. OPTION_ISO (qualified)
2. OPTION_NSO (non-qualified)
3. OPTION (not NSO or ISO)
4. RSU (restricted share units)
5. CSAR(cash-settled stock appreciation rights)
6. SSAR(stock-settled stock appreciation rights)

**ONE OF:**
• OPTION_NSO
• OPTION_ISO
• OPTION
• RSU
• CSAR
• SSAR | If the plan security is compensation, what kind? | `REQUIRED` | | option_grant_type | `Enum - Option Type`

_Description:_ Enumeration of option types

**ONE OF:**
• NSO
• ISO
• INTL | If the plan security is an option, what kind? | - | | quantity | [schema/types/Numeric](../../../types/Numeric.md) | How many shares are subject to this plan security? | `REQUIRED` | diff --git a/samples/StockPlans.ocf.json b/samples/StockPlans.ocf.json index 10e0b74d7..55568863d 100644 --- a/samples/StockPlans.ocf.json +++ b/samples/StockPlans.ocf.json @@ -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." ] diff --git a/schema/objects/StockPlan.schema.json b/schema/objects/StockPlan.schema.json index c5e5c3631..3e470e017 100644 --- a/schema/objects/StockPlan.schema.json +++ b/schema/objects/StockPlan.schema.json @@ -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" } diff --git a/schema/objects/transactions/issuance/EquityCompensationIssuance.schema.json b/schema/objects/transactions/issuance/EquityCompensationIssuance.schema.json index d9700fd3b..792711751 100644 --- a/schema/objects/transactions/issuance/EquityCompensationIssuance.schema.json +++ b/schema/objects/transactions/issuance/EquityCompensationIssuance.schema.json @@ -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?", @@ -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",