Skip to content

Commit 1e02ae3

Browse files
authored
Feat/share class and equity plan schema (#93)
* feat: add schema for share class and equity plan * feat: create migration file
1 parent 1c3b239 commit 1e02ae3

File tree

3 files changed

+130
-5
lines changed

3 files changed

+130
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"postinstall": "prisma generate",
1616
"lint": "next lint",
1717
"start": "next start",
18-
"format": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\"",
18+
"format": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\" && npx prisma format",
1919
"email:preview": "email preview ./src/emails"
2020
},
2121
"dependencies": {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
-- CreateEnum
2+
CREATE TYPE "ShareTypeEnum" AS ENUM ('common', 'preferred');
3+
4+
-- CreateEnum
5+
CREATE TYPE "SharePrefixEnum" AS ENUM ('CS', 'PS');
6+
7+
-- CreateEnum
8+
CREATE TYPE "CancellationBehaviorEnum" AS ENUM ('RETIRE', 'RETURN_TO_POOL', 'HOLD_AS_CAPITAL_STOCK', 'DEFINED_PER_PLAN_SECURITY');
9+
10+
-- CreateTable
11+
CREATE TABLE "ShareClass" (
12+
"id" TEXT NOT NULL,
13+
"idx" TEXT NOT NULL,
14+
"name" TEXT NOT NULL,
15+
"classType" "ShareTypeEnum" NOT NULL DEFAULT 'common',
16+
"prefix" "SharePrefixEnum" NOT NULL DEFAULT 'CS',
17+
"initialSharesAuthorized" BIGINT NOT NULL,
18+
"boardApprovalDate" TIMESTAMP(3) NOT NULL,
19+
"stockholderApprovalDate" TIMESTAMP(3) NOT NULL,
20+
"votesPerShare" INTEGER NOT NULL,
21+
"parValue" DOUBLE PRECISION NOT NULL,
22+
"pricePerShare" DOUBLE PRECISION NOT NULL,
23+
"seniority" INTEGER NOT NULL,
24+
"conversionRights" JSONB NOT NULL DEFAULT '{"convertsToFutureRound": null,"convertsToStockClassId": null}',
25+
"liquidationPreferenceMultiple" DOUBLE PRECISION NOT NULL,
26+
"participationCapMultiple" DOUBLE PRECISION NOT NULL,
27+
"companyId" TEXT NOT NULL,
28+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
29+
"updatedAt" TIMESTAMP(3) NOT NULL,
30+
31+
CONSTRAINT "ShareClass_pkey" PRIMARY KEY ("id")
32+
);
33+
34+
-- CreateTable
35+
CREATE TABLE "EquityPlan" (
36+
"id" TEXT NOT NULL,
37+
"name" TEXT NOT NULL,
38+
"boardApprovalDate" TIMESTAMP(3) NOT NULL,
39+
"initialSharesReserved" BIGINT NOT NULL,
40+
"defaultCancellatonBehavior" "CancellationBehaviorEnum" NOT NULL,
41+
"comments" JSONB NOT NULL DEFAULT '[]',
42+
"companyId" TEXT NOT NULL,
43+
"shareClassId" TEXT NOT NULL,
44+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
45+
"updatedAt" TIMESTAMP(3) NOT NULL,
46+
47+
CONSTRAINT "EquityPlan_pkey" PRIMARY KEY ("id")
48+
);
49+
50+
-- CreateIndex
51+
CREATE INDEX "ShareClass_companyId_idx" ON "ShareClass"("companyId");
52+
53+
-- CreateIndex
54+
CREATE INDEX "EquityPlan_shareClassId_idx" ON "EquityPlan"("shareClassId");
55+
56+
-- CreateIndex
57+
CREATE INDEX "EquityPlan_companyId_idx" ON "EquityPlan"("companyId");

prisma/schema.prisma

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,12 @@ model Company {
8181
state String
8282
zipcode String
8383
84-
createdAt DateTime @default(now())
85-
updatedAt DateTime @updatedAt
86-
users Membership[]
87-
audits Audit[]
84+
createdAt DateTime @default(now())
85+
updatedAt DateTime @updatedAt
86+
users Membership[]
87+
audits Audit[]
88+
shareClasses ShareClass[]
89+
equityPlans EquityPlan[]
8890
8991
@@unique([publicId])
9092
}
@@ -147,3 +149,69 @@ model Audit {
147149
148150
@@index([companyId])
149151
}
152+
153+
enum ShareTypeEnum {
154+
common
155+
preferred
156+
}
157+
158+
enum SharePrefixEnum {
159+
CS // Common Shares
160+
PS // Preferred Shares
161+
}
162+
163+
// Based on OCF format
164+
// https://open-cap-table-coalition.github.io/Open-Cap-Format-OCF/schema_markdown/schema/objects/StockClass/
165+
model ShareClass {
166+
id String @id @default(cuid())
167+
idx String // auto-generated, auto-incremented based on company
168+
name String
169+
classType ShareTypeEnum @default(common)
170+
prefix SharePrefixEnum @default(CS)
171+
initialSharesAuthorized BigInt
172+
boardApprovalDate DateTime
173+
stockholderApprovalDate DateTime
174+
votesPerShare Int
175+
parValue Float
176+
pricePerShare Float
177+
seniority Int
178+
conversionRights Json @default("{\"convertsToFutureRound\": null,\"convertsToStockClassId\": null}")
179+
liquidationPreferenceMultiple Float
180+
participationCapMultiple Float
181+
182+
companyId String
183+
company Company @relation(fields: [companyId], references: [id])
184+
equityPlans EquityPlan[]
185+
186+
createdAt DateTime @default(now())
187+
updatedAt DateTime @updatedAt
188+
189+
@@index([companyId])
190+
}
191+
192+
enum CancellationBehaviorEnum {
193+
RETIRE
194+
RETURN_TO_POOL
195+
HOLD_AS_CAPITAL_STOCK
196+
DEFINED_PER_PLAN_SECURITY
197+
}
198+
199+
model EquityPlan {
200+
id String @id @default(cuid())
201+
name String
202+
boardApprovalDate DateTime
203+
initialSharesReserved BigInt
204+
defaultCancellatonBehavior CancellationBehaviorEnum
205+
comments Json @default("[]")
206+
207+
companyId String
208+
company Company @relation(fields: [companyId], references: [id])
209+
shareClassId String
210+
shareClass ShareClass @relation(fields: [shareClassId], references: [id])
211+
212+
createdAt DateTime @default(now())
213+
updatedAt DateTime @updatedAt
214+
215+
@@index([shareClassId])
216+
@@index([companyId])
217+
}

0 commit comments

Comments
 (0)