Skip to content

Commit

Permalink
Feat/share class and equity plan schema (#93)
Browse files Browse the repository at this point in the history
* feat: add schema for share class and equity plan

* feat: create migration file
  • Loading branch information
dahal authored Feb 4, 2024
1 parent 1c3b239 commit 1e02ae3
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 5 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"postinstall": "prisma generate",
"lint": "next lint",
"start": "next start",
"format": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\"",
"format": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\" && npx prisma format",
"email:preview": "email preview ./src/emails"
},
"dependencies": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
-- CreateEnum
CREATE TYPE "ShareTypeEnum" AS ENUM ('common', 'preferred');

-- CreateEnum
CREATE TYPE "SharePrefixEnum" AS ENUM ('CS', 'PS');

-- CreateEnum
CREATE TYPE "CancellationBehaviorEnum" AS ENUM ('RETIRE', 'RETURN_TO_POOL', 'HOLD_AS_CAPITAL_STOCK', 'DEFINED_PER_PLAN_SECURITY');

-- CreateTable
CREATE TABLE "ShareClass" (
"id" TEXT NOT NULL,
"idx" TEXT NOT NULL,
"name" TEXT NOT NULL,
"classType" "ShareTypeEnum" NOT NULL DEFAULT 'common',
"prefix" "SharePrefixEnum" NOT NULL DEFAULT 'CS',
"initialSharesAuthorized" BIGINT NOT NULL,
"boardApprovalDate" TIMESTAMP(3) NOT NULL,
"stockholderApprovalDate" TIMESTAMP(3) NOT NULL,
"votesPerShare" INTEGER NOT NULL,
"parValue" DOUBLE PRECISION NOT NULL,
"pricePerShare" DOUBLE PRECISION NOT NULL,
"seniority" INTEGER NOT NULL,
"conversionRights" JSONB NOT NULL DEFAULT '{"convertsToFutureRound": null,"convertsToStockClassId": null}',
"liquidationPreferenceMultiple" DOUBLE PRECISION NOT NULL,
"participationCapMultiple" DOUBLE PRECISION NOT NULL,
"companyId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,

CONSTRAINT "ShareClass_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "EquityPlan" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"boardApprovalDate" TIMESTAMP(3) NOT NULL,
"initialSharesReserved" BIGINT NOT NULL,
"defaultCancellatonBehavior" "CancellationBehaviorEnum" NOT NULL,
"comments" JSONB NOT NULL DEFAULT '[]',
"companyId" TEXT NOT NULL,
"shareClassId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,

CONSTRAINT "EquityPlan_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE INDEX "ShareClass_companyId_idx" ON "ShareClass"("companyId");

-- CreateIndex
CREATE INDEX "EquityPlan_shareClassId_idx" ON "EquityPlan"("shareClassId");

-- CreateIndex
CREATE INDEX "EquityPlan_companyId_idx" ON "EquityPlan"("companyId");
76 changes: 72 additions & 4 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,12 @@ model Company {
state String
zipcode String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
users Membership[]
audits Audit[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
users Membership[]
audits Audit[]
shareClasses ShareClass[]
equityPlans EquityPlan[]
@@unique([publicId])
}
Expand Down Expand Up @@ -147,3 +149,69 @@ model Audit {
@@index([companyId])
}

enum ShareTypeEnum {
common
preferred
}

enum SharePrefixEnum {
CS // Common Shares
PS // Preferred Shares
}

// Based on OCF format
// https://open-cap-table-coalition.github.io/Open-Cap-Format-OCF/schema_markdown/schema/objects/StockClass/
model ShareClass {
id String @id @default(cuid())
idx String // auto-generated, auto-incremented based on company
name String
classType ShareTypeEnum @default(common)
prefix SharePrefixEnum @default(CS)
initialSharesAuthorized BigInt
boardApprovalDate DateTime
stockholderApprovalDate DateTime
votesPerShare Int
parValue Float
pricePerShare Float
seniority Int
conversionRights Json @default("{\"convertsToFutureRound\": null,\"convertsToStockClassId\": null}")
liquidationPreferenceMultiple Float
participationCapMultiple Float
companyId String
company Company @relation(fields: [companyId], references: [id])
equityPlans EquityPlan[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([companyId])
}

enum CancellationBehaviorEnum {
RETIRE
RETURN_TO_POOL
HOLD_AS_CAPITAL_STOCK
DEFINED_PER_PLAN_SECURITY
}

model EquityPlan {
id String @id @default(cuid())
name String
boardApprovalDate DateTime
initialSharesReserved BigInt
defaultCancellatonBehavior CancellationBehaviorEnum
comments Json @default("[]")
companyId String
company Company @relation(fields: [companyId], references: [id])
shareClassId String
shareClass ShareClass @relation(fields: [shareClassId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([shareClassId])
@@index([companyId])
}

0 comments on commit 1e02ae3

Please sign in to comment.