SPB Git

spb/airiskindex

Public

The most methodologically rigorous, fully transparent AI job-exposure index.

feat(db): initial migration

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
simon-pierre boucher committed (Aug 5, 2026) parent 62a5a0f Browse files

2 changed files +172 −0

added packages/db/prisma/migrations/20260805045624_init/migration.sql +169 −0
@@ -0,0 +1,169 @@
1+-- CreateTable
2+CREATE TABLE "Occupation" (
3+ "code" TEXT NOT NULL,
4+ "title" TEXT NOT NULL,
5+ "description" TEXT,
6+ "escoUri" TEXT,
7+ "romeCode" TEXT,
8+ "crosswalkNote" TEXT,
9+ "medianWageCents" INTEGER,
10+ "wageCurrency" TEXT NOT NULL DEFAULT 'USD',
11+ "employment" INTEGER,
12+
13+ CONSTRAINT "Occupation_pkey" PRIMARY KEY ("code")
14+);
15+
16+-- CreateTable
17+CREATE TABLE "Task" (
18+ "id" TEXT NOT NULL,
19+ "occupationCode" TEXT NOT NULL,
20+ "statement" TEXT NOT NULL,
21+ "importance" DOUBLE PRECISION,
22+
23+ CONSTRAINT "Task_pkey" PRIMARY KEY ("id")
24+);
25+
26+-- CreateTable
27+CREATE TABLE "TaskRating" (
28+ "id" TEXT NOT NULL,
29+ "taskId" TEXT NOT NULL,
30+ "dimension" TEXT NOT NULL,
31+ "model" TEXT NOT NULL,
32+ "promptVersion" TEXT NOT NULL,
33+ "sampleIndex" INTEGER NOT NULL DEFAULT 0,
34+ "rating" INTEGER NOT NULL,
35+ "rationale" TEXT,
36+ "rawResponse" JSONB NOT NULL,
37+ "ratedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
38+
39+ CONSTRAINT "TaskRating_pkey" PRIMARY KEY ("id")
40+);
41+
42+-- CreateTable
43+CREATE TABLE "ExpertOverride" (
44+ "id" TEXT NOT NULL,
45+ "taskId" TEXT NOT NULL,
46+ "dimension" TEXT NOT NULL,
47+ "ratingLow" INTEGER NOT NULL,
48+ "ratingMid" DOUBLE PRECISION NOT NULL,
49+ "ratingHigh" INTEGER NOT NULL,
50+ "reviewer" TEXT NOT NULL,
51+ "note" TEXT,
52+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
53+
54+ CONSTRAINT "ExpertOverride_pkey" PRIMARY KEY ("id")
55+);
56+
57+-- CreateTable
58+CREATE TABLE "ScoreRun" (
59+ "id" TEXT NOT NULL,
60+ "indexVersion" TEXT NOT NULL,
61+ "raterPromptVersion" TEXT NOT NULL,
62+ "raterModels" TEXT[],
63+ "notes" TEXT,
64+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
65+
66+ CONSTRAINT "ScoreRun_pkey" PRIMARY KEY ("id")
67+);
68+
69+-- CreateTable
70+CREATE TABLE "OccupationScore" (
71+ "id" TEXT NOT NULL,
72+ "runId" TEXT NOT NULL,
73+ "occupationCode" TEXT NOT NULL,
74+ "substitutionLow" DOUBLE PRECISION NOT NULL,
75+ "substitution" DOUBLE PRECISION NOT NULL,
76+ "substitutionHigh" DOUBLE PRECISION NOT NULL,
77+ "exposureLow" DOUBLE PRECISION NOT NULL,
78+ "exposure" DOUBLE PRECISION NOT NULL,
79+ "exposureHigh" DOUBLE PRECISION NOT NULL,
80+ "augmentationLow" DOUBLE PRECISION NOT NULL,
81+ "augmentation" DOUBLE PRECISION NOT NULL,
82+ "augmentationHigh" DOUBLE PRECISION NOT NULL,
83+ "highlyExposedTaskShare" DOUBLE PRECISION NOT NULL,
84+
85+ CONSTRAINT "OccupationScore_pkey" PRIMARY KEY ("id")
86+);
87+
88+-- CreateTable
89+CREATE TABLE "TaskScore" (
90+ "id" TEXT NOT NULL,
91+ "runId" TEXT NOT NULL,
92+ "taskId" TEXT NOT NULL,
93+ "substitutionLow" DOUBLE PRECISION NOT NULL,
94+ "substitution" DOUBLE PRECISION NOT NULL,
95+ "substitutionHigh" DOUBLE PRECISION NOT NULL,
96+ "exposureLow" DOUBLE PRECISION NOT NULL,
97+ "exposure" DOUBLE PRECISION NOT NULL,
98+ "exposureHigh" DOUBLE PRECISION NOT NULL,
99+ "augmentationLow" DOUBLE PRECISION NOT NULL,
100+ "augmentation" DOUBLE PRECISION NOT NULL,
101+ "augmentationHigh" DOUBLE PRECISION NOT NULL,
102+
103+ CONSTRAINT "TaskScore_pkey" PRIMARY KEY ("id")
104+);
105+
106+-- CreateTable
107+CREATE TABLE "ApiKey" (
108+ "id" TEXT NOT NULL,
109+ "hashedKey" TEXT NOT NULL,
110+ "name" TEXT NOT NULL,
111+ "rateLimitPerMin" INTEGER NOT NULL DEFAULT 600,
112+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
113+
114+ CONSTRAINT "ApiKey_pkey" PRIMARY KEY ("id")
115+);
116+
117+-- CreateIndex
118+CREATE INDEX "Task_occupationCode_idx" ON "Task"("occupationCode");
119+
120+-- CreateIndex
121+CREATE INDEX "TaskRating_taskId_dimension_idx" ON "TaskRating"("taskId", "dimension");
122+
123+-- CreateIndex
124+CREATE INDEX "TaskRating_promptVersion_idx" ON "TaskRating"("promptVersion");
125+
126+-- CreateIndex
127+CREATE UNIQUE INDEX "TaskRating_taskId_dimension_model_promptVersion_sampleIndex_key" ON "TaskRating"("taskId", "dimension", "model", "promptVersion", "sampleIndex");
128+
129+-- CreateIndex
130+CREATE UNIQUE INDEX "ExpertOverride_taskId_dimension_key" ON "ExpertOverride"("taskId", "dimension");
131+
132+-- CreateIndex
133+CREATE INDEX "ScoreRun_indexVersion_idx" ON "ScoreRun"("indexVersion");
134+
135+-- CreateIndex
136+CREATE INDEX "OccupationScore_occupationCode_idx" ON "OccupationScore"("occupationCode");
137+
138+-- CreateIndex
139+CREATE UNIQUE INDEX "OccupationScore_runId_occupationCode_key" ON "OccupationScore"("runId", "occupationCode");
140+
141+-- CreateIndex
142+CREATE INDEX "TaskScore_taskId_idx" ON "TaskScore"("taskId");
143+
144+-- CreateIndex
145+CREATE UNIQUE INDEX "TaskScore_runId_taskId_key" ON "TaskScore"("runId", "taskId");
146+
147+-- CreateIndex
148+CREATE UNIQUE INDEX "ApiKey_hashedKey_key" ON "ApiKey"("hashedKey");
149+
150+-- AddForeignKey
151+ALTER TABLE "Task" ADD CONSTRAINT "Task_occupationCode_fkey" FOREIGN KEY ("occupationCode") REFERENCES "Occupation"("code") ON DELETE RESTRICT ON UPDATE CASCADE;
152+
153+-- AddForeignKey
154+ALTER TABLE "TaskRating" ADD CONSTRAINT "TaskRating_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
155+
156+-- AddForeignKey
157+ALTER TABLE "ExpertOverride" ADD CONSTRAINT "ExpertOverride_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
158+
159+-- AddForeignKey
160+ALTER TABLE "OccupationScore" ADD CONSTRAINT "OccupationScore_runId_fkey" FOREIGN KEY ("runId") REFERENCES "ScoreRun"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
161+
162+-- AddForeignKey
163+ALTER TABLE "OccupationScore" ADD CONSTRAINT "OccupationScore_occupationCode_fkey" FOREIGN KEY ("occupationCode") REFERENCES "Occupation"("code") ON DELETE RESTRICT ON UPDATE CASCADE;
164+
165+-- AddForeignKey
166+ALTER TABLE "TaskScore" ADD CONSTRAINT "TaskScore_runId_fkey" FOREIGN KEY ("runId") REFERENCES "ScoreRun"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
167+
168+-- AddForeignKey
169+ALTER TABLE "TaskScore" ADD CONSTRAINT "TaskScore_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
added packages/db/prisma/migrations/migration_lock.toml +3 −0
@@ -0,0 +1,3 @@
1+# Please do not edit this file manually
2+# It should be added in your version-control system (i.e. Git)
3+provider = "postgresql"
\ No newline at end of file
4
Menu

Theme