@derwinjs/db 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +79 -0
- package/dist/agent-findings-ingestor.d.ts +40 -0
- package/dist/agent-findings-ingestor.d.ts.map +1 -0
- package/dist/agent-findings-ingestor.js +154 -0
- package/dist/agent-findings-ingestor.js.map +1 -0
- package/dist/classification-trust-store.d.ts +31 -0
- package/dist/classification-trust-store.d.ts.map +1 -0
- package/dist/classification-trust-store.js +154 -0
- package/dist/classification-trust-store.js.map +1 -0
- package/dist/coverage-gap-reporter.d.ts +35 -0
- package/dist/coverage-gap-reporter.d.ts.map +1 -0
- package/dist/coverage-gap-reporter.js +84 -0
- package/dist/coverage-gap-reporter.js.map +1 -0
- package/dist/fix-policy.d.ts +46 -0
- package/dist/fix-policy.d.ts.map +1 -0
- package/dist/fix-policy.js +162 -0
- package/dist/fix-policy.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/learning-health-reporter.d.ts +37 -0
- package/dist/learning-health-reporter.d.ts.map +1 -0
- package/dist/learning-health-reporter.js +141 -0
- package/dist/learning-health-reporter.js.map +1 -0
- package/dist/prisma.d.ts +31 -0
- package/dist/prisma.d.ts.map +1 -0
- package/dist/prisma.js +31 -0
- package/dist/prisma.js.map +1 -0
- package/dist/qa-fix-attempt-store.d.ts +28 -0
- package/dist/qa-fix-attempt-store.d.ts.map +1 -0
- package/dist/qa-fix-attempt-store.js +258 -0
- package/dist/qa-fix-attempt-store.js.map +1 -0
- package/dist/qa-pattern-store.d.ts +32 -0
- package/dist/qa-pattern-store.d.ts.map +1 -0
- package/dist/qa-pattern-store.js +123 -0
- package/dist/qa-pattern-store.js.map +1 -0
- package/dist/qa-revert-store.d.ts +24 -0
- package/dist/qa-revert-store.d.ts.map +1 -0
- package/dist/qa-revert-store.js +139 -0
- package/dist/qa-revert-store.js.map +1 -0
- package/dist/qa-run-store.d.ts +46 -0
- package/dist/qa-run-store.d.ts.map +1 -0
- package/dist/qa-run-store.js +201 -0
- package/dist/qa-run-store.js.map +1 -0
- package/dist/qa-ticket-store.d.ts +35 -0
- package/dist/qa-ticket-store.d.ts.map +1 -0
- package/dist/qa-ticket-store.js +293 -0
- package/dist/qa-ticket-store.js.map +1 -0
- package/dist/qa-uniformity-store.d.ts +41 -0
- package/dist/qa-uniformity-store.d.ts.map +1 -0
- package/dist/qa-uniformity-store.js +288 -0
- package/dist/qa-uniformity-store.js.map +1 -0
- package/dist/scripts/smoke-auto-fix.d.ts +37 -0
- package/dist/scripts/smoke-auto-fix.d.ts.map +1 -0
- package/dist/scripts/smoke-auto-fix.js +270 -0
- package/dist/scripts/smoke-auto-fix.js.map +1 -0
- package/dist/scripts/smoke-learning-loop.d.ts +21 -0
- package/dist/scripts/smoke-learning-loop.d.ts.map +1 -0
- package/dist/scripts/smoke-learning-loop.js +375 -0
- package/dist/scripts/smoke-learning-loop.js.map +1 -0
- package/dist/scripts/smoke-orchestration.d.ts +35 -0
- package/dist/scripts/smoke-orchestration.d.ts.map +1 -0
- package/dist/scripts/smoke-orchestration.js +215 -0
- package/dist/scripts/smoke-orchestration.js.map +1 -0
- package/dist/scripts/smoke-qa-ticket-store.d.ts +18 -0
- package/dist/scripts/smoke-qa-ticket-store.d.ts.map +1 -0
- package/dist/scripts/smoke-qa-ticket-store.js +233 -0
- package/dist/scripts/smoke-qa-ticket-store.js.map +1 -0
- package/package.json +69 -0
- package/prisma/migrations/20260501165631_init/migration.sql +407 -0
- package/prisma/migrations/20260503051425_0002_qap018b_qaticket_crosslink_fields/migration.sql +6 -0
- package/prisma/migrations/20260504231316_add_project_repofullname_and_webhooksecret/migration.sql +12 -0
- package/prisma/migrations/20260504232851_add_qaticket_resolvedby/migration.sql +2 -0
- package/prisma/migrations/20260505042646_add_qapattern_qarevert/migration.sql +77 -0
- package/prisma/migrations/20260505055826_add_qauniformity_and_agent_trigger/migration.sql +35 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +748 -0
- package/prisma/seed.ts +181 -0
- package/prisma-client/default.d.ts +1 -0
- package/prisma-client/default.js +1 -0
- package/prisma-client/edge.d.ts +1 -0
- package/prisma-client/edge.js +631 -0
- package/prisma-client/index-browser.js +615 -0
- package/prisma-client/index.d.ts +34509 -0
- package/prisma-client/index.js +660 -0
- package/prisma-client/libquery_engine-darwin-arm64.dylib.node +0 -0
- package/prisma-client/libquery_engine-linux-arm64-openssl-3.0.x.so.node +0 -0
- package/prisma-client/libquery_engine-rhel-openssl-3.0.x.so.node +0 -0
- package/prisma-client/package.json +97 -0
- package/prisma-client/runtime/edge-esm.js +31 -0
- package/prisma-client/runtime/edge.js +31 -0
- package/prisma-client/runtime/index-browser.d.ts +365 -0
- package/prisma-client/runtime/index-browser.js +13 -0
- package/prisma-client/runtime/library.d.ts +3403 -0
- package/prisma-client/runtime/library.js +143 -0
- package/prisma-client/runtime/react-native.js +80 -0
- package/prisma-client/runtime/wasm.js +32 -0
- package/prisma-client/schema.prisma +748 -0
- package/prisma-client/wasm.d.ts +1 -0
- package/prisma-client/wasm.js +615 -0
package/prisma/seed.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @derwinjs/db seed.
|
|
3
|
+
*
|
|
4
|
+
* Creates a minimal dev fixture so engineers can run `pnpm db:seed` after a
|
|
5
|
+
* fresh `prisma migrate dev` and have something to query against. Deliberately
|
|
6
|
+
* minimal — just one Project (Lifeline) with its first ProjectProfile, a
|
|
7
|
+
* default Policy, and a single SpendLedger row to verify FKs work.
|
|
8
|
+
*
|
|
9
|
+
* Real Profile content gets generated in QAP-047 (Sprint 4) by ingesting
|
|
10
|
+
* Lifeline's actual docs. This seed is a placeholder that resembles what the
|
|
11
|
+
* generated Profile will look like, so the dev experience isn't empty.
|
|
12
|
+
*
|
|
13
|
+
* Status: scaffolded in QAP-005. Ingestion-driven seeds replace this in QAP-047.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { PrismaClient, ProjectMode, ProjectType } from '../src/prisma.js';
|
|
17
|
+
|
|
18
|
+
const prisma = new PrismaClient();
|
|
19
|
+
|
|
20
|
+
async function main() {
|
|
21
|
+
console.log('Seeding Derwin platform DB...');
|
|
22
|
+
|
|
23
|
+
// ─── 1. Lifeline project ─────────────────────────────────────────────
|
|
24
|
+
const lifeline = await prisma.project.upsert({
|
|
25
|
+
where: { slug: 'lifeline' },
|
|
26
|
+
update: {},
|
|
27
|
+
create: {
|
|
28
|
+
name: 'Lifeline',
|
|
29
|
+
slug: 'lifeline',
|
|
30
|
+
type: ProjectType.ERP,
|
|
31
|
+
mode: ProjectMode.AUTHOR,
|
|
32
|
+
modeChangedBy: 'system:seed',
|
|
33
|
+
monthlyBudgetCents: 25000, // $250/month
|
|
34
|
+
dailyDispatchLimit: 50,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
console.log(` ✓ Project: ${lifeline.slug} (${lifeline.id})`);
|
|
38
|
+
|
|
39
|
+
// ─── 2. Profile (placeholder; real one lands in QAP-047) ────────────
|
|
40
|
+
const profile = await prisma.projectProfile.upsert({
|
|
41
|
+
where: { projectId: lifeline.id },
|
|
42
|
+
update: {},
|
|
43
|
+
create: {
|
|
44
|
+
projectId: lifeline.id,
|
|
45
|
+
type: ProjectType.ERP,
|
|
46
|
+
domainOntology: {
|
|
47
|
+
entities: [
|
|
48
|
+
'Patient',
|
|
49
|
+
'Booking',
|
|
50
|
+
'Provider',
|
|
51
|
+
'Encounter',
|
|
52
|
+
'ChartNote',
|
|
53
|
+
'Payment',
|
|
54
|
+
'Location',
|
|
55
|
+
],
|
|
56
|
+
actions: ['book', 'arrive', 'sign', 'bill', 'refund', 'export'],
|
|
57
|
+
roles: ['admin', 'provider', 'patient', 'front-desk'],
|
|
58
|
+
},
|
|
59
|
+
// 8-vector risk weights — see product brief §3.1 + §7.1
|
|
60
|
+
riskProfile: {
|
|
61
|
+
codeHealth: 0.8,
|
|
62
|
+
functionalCorrectness: 1.0,
|
|
63
|
+
uiUxIntegrity: 0.5,
|
|
64
|
+
perfResilience: 0.7,
|
|
65
|
+
security: 0.9,
|
|
66
|
+
complianceAudit: 1.0, // HIPAA gates this to max
|
|
67
|
+
multiTenantSafety: 1.0,
|
|
68
|
+
operationalHealth: 0.7,
|
|
69
|
+
},
|
|
70
|
+
criticalFlows: [
|
|
71
|
+
{
|
|
72
|
+
name: 'patient-signup-to-first-booking',
|
|
73
|
+
steps: ['signup', 'verify-email', 'browse-services', 'book', 'confirmation'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'booking-to-arrived-to-encounter-to-signed-chart',
|
|
77
|
+
steps: ['arrive', 'check-in', 'encounter-start', 'chart-note', 'sign'],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'chart-sign-to-bill-to-payment',
|
|
81
|
+
steps: ['sign', 'bill-create', 'payment-process', 'reconcile'],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'admin-onboard-new-tenant',
|
|
85
|
+
steps: ['create-location', 'invite-providers', 'configure-services'],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'patient-data-export',
|
|
89
|
+
steps: ['request', 'verify-identity', 'package', 'deliver'],
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
glossary: {
|
|
93
|
+
Tenant: 'medspa Location (NOT customer org)',
|
|
94
|
+
Ticket: 'roadmap item (NOT support ticket)',
|
|
95
|
+
Patient: 'end-user receiving services',
|
|
96
|
+
Provider: 'licensed practitioner',
|
|
97
|
+
Encounter: 'a recorded patient-provider interaction',
|
|
98
|
+
},
|
|
99
|
+
dependencies: [
|
|
100
|
+
{ name: 'Vagaro', kind: 'scheduling', integration: 'cron-pull' },
|
|
101
|
+
{ name: 'Stripe', kind: 'payments', integration: 'webhook' },
|
|
102
|
+
{ name: 'Twilio', kind: 'sms', integration: 'webhook' },
|
|
103
|
+
{ name: 'Anthropic API', kind: 'llm', integration: 'http' },
|
|
104
|
+
],
|
|
105
|
+
complianceTags: ['HIPAA', 'SOC 2 (in progress)'],
|
|
106
|
+
ingestedDocsHash: 'seed-placeholder',
|
|
107
|
+
lastIngestedAt: new Date(),
|
|
108
|
+
lastEvolvedAt: new Date(),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
console.log(` ✓ ProjectProfile: ${profile.id}`);
|
|
112
|
+
|
|
113
|
+
// ─── 3. Default Policy (Sprint 8 fills this out further) ────────────
|
|
114
|
+
await prisma.policy.upsert({
|
|
115
|
+
where: { id: `${lifeline.id}:default-risk-tier` },
|
|
116
|
+
update: {},
|
|
117
|
+
create: {
|
|
118
|
+
id: `${lifeline.id}:default-risk-tier`,
|
|
119
|
+
projectId: lifeline.id,
|
|
120
|
+
policyType: 'RISK_TIER',
|
|
121
|
+
pathRules: [
|
|
122
|
+
{ glob: 'src/lib/auth/**', tier: 'NEVER' },
|
|
123
|
+
{ glob: 'src/lib/billing/**', tier: 'NEVER' },
|
|
124
|
+
{ glob: 'prisma/schema.prisma', tier: 'NEVER' },
|
|
125
|
+
{ glob: 'prisma/migrations/**', tier: 'NEVER' },
|
|
126
|
+
{ glob: '.env*', tier: 'NEVER' },
|
|
127
|
+
{ glob: 'src/app/api/**/route.ts', tier: 'HIGH' },
|
|
128
|
+
{ glob: 'src/lib/services/billing/**', tier: 'HIGH' },
|
|
129
|
+
{ glob: 'src/app/(dashboard)/**', tier: 'MEDIUM' },
|
|
130
|
+
{ glob: 'tests/e2e/**', tier: 'LOW' },
|
|
131
|
+
{ glob: '**/*.test.ts', tier: 'LOW' },
|
|
132
|
+
{ glob: 'content/**', tier: 'LOW' },
|
|
133
|
+
],
|
|
134
|
+
classificationOverrides: {
|
|
135
|
+
SELECTOR: 'LOW',
|
|
136
|
+
PRODUCT_BUG: 'MEDIUM',
|
|
137
|
+
TIMING: 'LOW',
|
|
138
|
+
ACCESSIBILITY: 'LOW',
|
|
139
|
+
PII_LEAKAGE: 'NEVER',
|
|
140
|
+
TENANT_LEAKAGE: 'NEVER',
|
|
141
|
+
},
|
|
142
|
+
autoMergeTrustThreshold: 70,
|
|
143
|
+
autoMergeMediumThreshold: 85,
|
|
144
|
+
dailyDispatchLimit: 50,
|
|
145
|
+
// Per ADR-0006 — try once, route to FAIL bucket on pre-verify failure.
|
|
146
|
+
// Operator can raise this 1–4 via QAP-088 policy editor (Sprint 8).
|
|
147
|
+
perTicketAttemptLimit: 1,
|
|
148
|
+
freezeWindowsCron: [],
|
|
149
|
+
escalationTriggers: {
|
|
150
|
+
regressionDetected: 'always',
|
|
151
|
+
consecutiveFailures: 3,
|
|
152
|
+
classifierConfidenceFloor: 0.5,
|
|
153
|
+
},
|
|
154
|
+
updatedBy: 'system:seed',
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
console.log(` ✓ Policy: default risk-tier rules`);
|
|
158
|
+
|
|
159
|
+
// ─── 4. Sanity-check spend ledger row ───────────────────────────────
|
|
160
|
+
await prisma.spendLedger.create({
|
|
161
|
+
data: {
|
|
162
|
+
projectId: lifeline.id,
|
|
163
|
+
vendor: 'system',
|
|
164
|
+
eventType: 'seed_marker',
|
|
165
|
+
costCents: 0,
|
|
166
|
+
meta: { note: 'Seed marker — confirms FKs and indices are wired up.' },
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
console.log(` ✓ SpendLedger: seed marker`);
|
|
170
|
+
|
|
171
|
+
console.log('\nSeeded Lifeline. Real Profile generation lands in QAP-047 (Sprint 4).');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
main()
|
|
175
|
+
.catch((e: unknown) => {
|
|
176
|
+
console.error(e);
|
|
177
|
+
process.exit(1);
|
|
178
|
+
})
|
|
179
|
+
.finally(() => {
|
|
180
|
+
void prisma.$disconnect();
|
|
181
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./index"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = { ...require('.') }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./default"
|